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 的析构函数。
我正在使用 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 的析构函数。