我正在使用SDL2开发C ++应用程序,并希望使用shared_ptr
来保存指针。所以我做,例如这样:
typedef std::shared_ptr<SDL_Window> SDLWindowPtr;
我需要在整个事情上使用自定义删除器。是否可以在typedef中包含它?如果有,怎么样?删除功能称为SDL_DestroyWindow
。如果没有,我如何将shared_ptr
使用SDL_DestroyWindow
作为自定义删除功能?
提前致谢!
答案 0 :(得分:6)
自定义删除器在构造函数中传递给shared_ptr
,因此无法使用typedef
完成(删除器不是实例化shared_ptr
类型的一部分)。
可以为unique_ptr
执行(其中删除操作是类型的一部分)。
我的建议:创建将生成SDLWindowPtr
的工厂方法(为其指定正确的删除工具)。类似std::make_shared
的内容,但专用于您的系统(例如createSDLWindow
?)。
答案 1 :(得分:1)
实际上你必须在typedef struct {
hdr_t *hdr;
pyld_t *pyld;
} msg_index_t;
的cronstructor上传递删除器,举个例子:
shared_ptr
您可以创建一个工厂函数来为SDLWindowPtr分配内存,以及其他函数来释放它,如果您正在使用类,则可以调用该类的析构函数。