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

时间:2015-09-02 14:23:35

标签: c++ sdl typedef shared-ptr

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

typedef std::shared_ptr<SDL_Window> SDLWindowPtr;

我需要在整个事情上使用自定义删除器。是否可以在typedef中包含它?如果有,怎么样?删除功能称为SDL_DestroyWindow。如果没有,我如何将shared_ptr使用SDL_DestroyWindow作为自定义删除功能?

提前致谢!

2 个答案:

答案 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分配内存,以及其他函数来释放它,如果您正在使用类,则可以调用该类的析构函数。