std::shared_ptr:带有自定义删除器的 typedef

std::shared_ptr: typedef with custom deleter

我正在使用 SDL2 开发 C++ 应用程序并希望使用 shared_ptr 来保存指针内容。所以我做例如这个:

typedef std::shared_ptr<SDL_Window> SDLWindowPtr;

而且我需要在整个过程中使用自定义删除器。是否可以将其包含在 typedef 中?如果是,如何?删除函数称为SDL_DestroyWindow。如果没有,如何让 shared_ptr 使用 SDL_DestroyWindow 作为自定义删除功能?

提前致谢!

自定义删除器在构造函数中传递给 shared_ptr,因此无法使用 typedef 完成(删除器不是实例化类型 shared_ptr 的一部分)。

可以为 unique_ptr 完成(其中删除器是类型的一部分)。

我的建议:创建将生成 SDLWindowPtr 的工厂方法(为它们分配适当的删除器)。类似于 std::make_shared 但专用于您的系统(例如 createSDLWindow ?)。

实际上你必须在 shared_ptr 的 cronstructor 上传递 deleter,下面是一个例子:

std::shared_ptr<MyObj> ptr(CreateMyObj(), std::ptr_fun(FreeMyObj));

您可以创建一个工厂函数来为 SDLWindowPtr 分配内存,并创建其他函数来释放它,如果您正在使用 class,您可以调用 class 的析构函数。