std::shared_ptr:typedef与自定义删除器 我使用SDL2开发C++应用程序,希望使用 SydDypPTR 来保存指针。因此,我会这样做,例如: typedef std::shared_ptr<SDL_Window> SDLWindowPtr; typedef std::shared_ptr SDLWindowPtr;

std::shared_ptr:typedef与自定义删除器 我使用SDL2开发C++应用程序,希望使用 SydDypPTR 来保存指针。因此,我会这样做,例如: typedef std::shared_ptr<SDL_Window> SDLWindowPtr; typedef std::shared_ptr SDLWindowPtr;,c++,sdl,typedef,shared-ptr,C++,Sdl,Typedef,Shared Ptr,我需要在这件事上使用自定义删除程序。是否可以将其包含在typedef中?如果是,如何进行?删除函数称为SDL\u destroy window。如果没有,我如何使共享\u ptr使用SDL\u destroy window作为自定义删除功能 提前谢谢 自定义删除器被传递到构造函数中的共享\u ptr,因此不能使用typedef(删除器不是实例化的共享\u ptr类型的一部分) 可以为唯一性\u ptr(其中deleter是类型的一部分)执行此操作 我的建议是:创建工厂方法,生成SDLWindow

我需要在这件事上使用自定义删除程序。是否可以将其包含在typedef中?如果是,如何进行?删除函数称为
SDL\u destroy window
。如果没有,我如何使
共享\u ptr
使用
SDL\u destroy window
作为自定义删除功能


提前谢谢

自定义删除器被传递到构造函数中的
共享\u ptr
,因此不能使用
typedef
(删除器不是实例化的
共享\u ptr
类型的一部分)

可以为
唯一性\u ptr
(其中deleter是类型的一部分)执行此操作


我的建议是:创建工厂方法,生成
SDLWindowPtr
(为它们指定适当的删除程序)。类似于
std::make_shared
但专用于您的系统(例如
createSDLWindow
?)。

事实上,您必须在
shared_ptr
的cronstructor上传递删除程序,如下示例:

std::shared_ptr<MyObj> ptr(CreateMyObj(), std::ptr_fun(FreeMyObj));
std::shared_ptr ptr(CreateMyObj(),std::ptr_fun(freemmyobj));

您可以创建一个工厂函数来为SDLWindowPtr分配内存,并创建其他函数来释放它,如果您使用的是类,则可以调用该类的析构函数。

Deleter type不是
std::shared\u ptr
的一部分。每次创建
std::shared\u ptr
的实例时都应该指定deleter谢谢。在第一个答案中,使用工厂是一个非常好的想法。好吧,那么使用typedef是不可能的?这个工厂是个好主意!谢谢不,typedef重新定义类型,你想重新定义功能-使用功能,所以我将使用工厂。我没有想到有什么原因:)。非常感谢!在这种情况下,工厂的最大问题是,不知道必须使用它的人最终会在没有正确的删除器的情况下创建指针。我认为这是一个大问题。