我正在使用SDL2开发一个c++应用程序,并希望使用shared_ptr
来保持指针的东西。所以我这样做:
typedef std::shared_ptr<SDL_Window> SDLWindowPtr;
我需要使用自定义删除器。有可能在类型定义中包含这个吗?如果是,怎么做?删除功能称为SDL_DestroyWindow
。如果没有,如何使shared_ptr
使用SDL_DestroyWindow
作为自定义删除功能?
提前感谢!
自定义deleter在构造函数中传递给shared_ptr
,因此不能使用typedef
完成(deleter不是实例化shared_ptr
类型的一部分)。
对于unique_ptr
(其中deleter是type的一部分)可以这样做。
我的建议:创建工厂方法,将产生SDLWindowPtr
(分配适当的deleter)。类似于std::make_shared
,但专用于您的系统(例如createSDLWindow
?)。
实际上您必须在shared_ptr
的cronstructor上传递删除器,如下示例:
std::shared_ptr<MyObj> ptr(CreateMyObj(), std::ptr_fun(FreeMyObj));
您可以创建一个工厂函数为SDLWindowPtr分配内存,并创建其他函数来释放它,如果您正在使用类,您可以调用类的析构函数