用自定义删除器增强scoped_ptr / scoped_array

|| 我看不到如何获取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 它允许自定义删除器。     

要回复问题请先登录注册