我不知道如何让scoped_ptr或scoped_array使用自定义删除器。也许还有另一个类似于shared_ptr的允许受控删除的实现。
顺便问一下,为什么shared_ptr允许自定义删除,而scoped_ptr不允许?只是好奇而已。
发布于 2011-04-15 20:19:07
我不知道如何让
scoped_ptr或scoped_array使用自定义删除器
你不能这么做。
也许还有另一种类似于
shared_ptr的允许受控删除的实现?
如果编译器支持rvalue引用,而标准库实现实现了std::unique_ptr,则可以使用它。
否则,boost::scoped_ptr实现非常简单。最新版本少于100行简单代码。创建具有自定义删除器(通过模板参数静态或通过运行时提供的函数或函子)的派生程序非常简单。
发布于 2011-04-15 20:36:20
scoped_ptr不允许自定义删除器。我可以想象的主要原因是,如果它像sizeof(T*)一样保持一个boost::function<>,那么它的大小将不等于shared_ptr。
我认为最可移植的选项是使用shared_ptr或编写支持删除器的自己的scoped_ptr。
发布于 2014-12-27 19:06:46
您可以重载boost::checked_delete函数。
namespace boost {
template<>
void checked_delete (Foo* x)
{
....
}
} // namespace boost重载后,scoped_ptr将调用checked_delete而不是delete。
https://stackoverflow.com/questions/5681489
复制相似问题