Std::shared_ptr:带自定义delete的typedef
std::shared_ptr: typedef with custom deleter
我正在使用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分配内存,并创建其他函数来释放它,如果您正在使用类,您可以调用类的析构函数
相关文章:
- C++:TypeDef使用元组
- 运算符C++ "delete []"仅删除 2 个前值
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 为什么在使用typedef时类推导指南会失败
- g++用户定义的动态链接库上的全局new和delete运算符
- 尝试根据类中 typedef 的存在来专门化模板函数
- 如何重新定义MPI_FLOAT,MPI_DOUBLE以 typedef 的方式
- typedef 枚举和枚举类有什么区别?
- 为什么"delete"关键字不删除节点?
- 在类模板中使用 typedef 时出错
- "delete"在 C++ 中实际上做了什么?
- 模板类中的 typedef 语句
- 析构函数和'delete'之间的区别
- 在 typedef 内部使用 const 关键字和在 typedef 外部使用 const 关键字之间有区别吗?
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- 如何知道何时调用删除以及何时调用 delete[] C++?
- 在对象指针上调用 Delete 是否会递归删除其动态分配的成员
- 体系结构x86_64的未定义符号:std:terminate(),typeinfo,运算符delete[],运算符new
- 析构函数中的"delete this"
- Std::shared_ptr:带自定义delete的typedef