Std::shared_ptr:带自定义delete的typedef

std::shared_ptr: typedef with custom deleter

本文关键字:delete typedef 自定义 ptr shared Std      更新时间:2023-10-16

我正在使用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分配内存,并创建其他函数来释放它,如果您正在使用类,您可以调用类的析构函数