using shared_ptr and custom deleter