问题描述
||
我看不到如何获取scoped_ptr或scoped_array来使用自定义删除器。也许还有另一种实现,它允许类似于shared_ptr的受控删除?
顺便说一句,为什么shared_ptr允许自定义删除器,而scoped_ptr不允许?只是好奇。
解决方法
我看不到如何获得
scoped_ptr
或scoped_array
来使用自定义删除器
你不能。
也许还有另一种实现允许类似于“ 2”的受控删除?
如果您的编译器支持右值引用,并且您的标准库实现实现了std::unique_ptr
,则可以使用它。
否则,“ 4”实现非常简单。最新版本的简单代码少于100行。创建具有自定义删除器的派生类(通过运行时提供的模板参数是静态的,或通过运行时提供的函数或函子的动态),将非常简单。
,scoped_ptr
不允许使用自定义删除器。我猜想的主要原因是,如果它像shared_ptr
那样保持boost::function<>
的大小,将不等于sizeof(T*)
。
我认为最方便的选择是使用ѭ2或编写支持删除器的自己的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
它允许自定义删除器。