我不知道如何使用 scoped_ptr 或 scoped_array 来使用自定义删除工具。也许有另一种实现允许控制删除类似于 shared_ptr ?
顺便说一句,为什么 shared_ptr 允许自定义删除,但 scoped_ptr 却不允许?好奇。
答案 0 :(得分:5)
我看不到如何让
scoped_ptr
或scoped_array
使用自定义删除器
你不能。
也许有另一种实现允许受控删除类似于
shared_ptr
?
如果您的编译器支持右值引用,而标准库实现实现std::unique_ptr
,则可以使用它。
否则,boost::scoped_ptr
实现非常简单。 The latest version不到100行简单代码。创建具有自定义删除器的自己的衍生物(通过模板参数静态或通过运行时提供的函数或函数动态)将非常简单。
答案 1 :(得分:3)
scoped_ptr
不允许自定义删除。我可以假设的主要原因是,如果sizeof(T*)
保持为boost::function<>
,其大小将不等于shared_ptr
。
我认为最便携的选项是使用shared_ptr
或编写自己的scoped_ptr
来支持删除者。
答案 2 :(得分:3)
您可以重载boost :: checked_delete函数,例如
namespace boost {
template<>
void checked_delete (Foo* x)
{
....
}
} // namespace boost
重载后,scoped_ptr将调用checked_delete而不是delete。
答案 3 :(得分:1)