使用自定义删除器增强scoped_ptr / scoped_array
Boost scoped_ptr / scoped_array with custom deleter
我不知道如何获得scoped_ptr或scoped_array使用自定义删除器。也许还有另一种实现允许类似于shared_ptr的受控删除?
Btw,为什么shared_ptr允许自定义删除,但scoped_ptr不允许?只是好奇。
我不知道如何让
scoped_ptr
或scoped_array
使用自定义删除器
你不能。
也许有另一种实现允许类似
shared_ptr
的受控删除?
如果你的编译器支持右值引用,并且你的标准库实现实现了std::unique_ptr
,你可以使用它。
否则,boost::scoped_ptr
的实现非常简单。最新版本只有不到100行简单的代码。创建带有自定义删除器(通过模板参数创建静态删除器,或者通过运行时提供的函数或函子创建动态删除器)的派生程序非常简单。
scoped_ptr
不允许自定义删除器。我能想到的主要原因是,如果它像shared_ptr
那样保留boost::function<>
,它的大小将不等于sizeof(T*)
。
我认为最便携的选择是使用shared_ptr
或编写自己的scoped_ptr
,将支持删除。
可以重载boost::checked_delete函数,例如
namespace boost {
template<>
void checked_delete (Foo* x)
{
....
}
} // namespace boost
重载后,scoped_ptr将调用checked_delete而不是delete。
Qt
中有另一种作用域指针和作用域数组的实现http://doc.qt.io/qt-5/qscopedpointer.html允许自定义删除
相关文章:
- CLANG 编译器 说:变量"PTR"可能未初始化
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 将 ptr 传递给 ptr 到 A 作为参数传递给 A 的函数是不好的做法吗?
- 为共享 ptr 向量实现复制 c'tor?
- 字符和整数中 **(ptr+1) 的值差异
- C++:在不中断共享的情况下通过引用传递共享 PTR?
- 如何将派生类从基 ptr 分配给 nlohmann::json
- 引用 std::shared:ptr 以避免引用计数
- 为什么我不能在不进行任何转换的情况下将浮点数放入任何类型的 ptr 中?
- 在调用函数时,ptr** 和 ptr*& 之间是否有区别,或者首选C++?
- 另一种类型的智能ptr,比如具有弱refs的unique_ptr
- 尝试打印出 *ptr++ 的值,以了解它是如何工作的
- 如何控制共享 ptr 引用计数?
- C++中的指针否定 (!ptr == NULL)
- 从const ptr*转换为ptr*时出现问题
- 这是MSVC 2013中具有共享PTR的单例的正确实现吗?
- 对唯一 ptr 无效读取的引用向量
- C++ 类型转换基础 PTR 到派生 PTR 保存在引用类中
- 如何使用非类型参数传递模板化类的 Ref 或 Ptr
- Boost Scoped Ptr-声明与分配