首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有自定义删除器的Boost scoped_ptr / scoped_array

带有自定义删除器的Boost scoped_ptr / scoped_array
EN

Stack Overflow用户
提问于 2011-04-15 19:34:49
回答 4查看 4.2K关注 0票数 7

我不知道如何让scoped_ptrscoped_array使用自定义删除器。也许还有另一个类似于shared_ptr的允许受控删除的实现。

顺便问一下,为什么shared_ptr允许自定义删除,而scoped_ptr不允许?只是好奇而已。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-04-15 20:19:07

我不知道如何让scoped_ptrscoped_array使用自定义删除器

你不能这么做。

也许还有另一种类似于shared_ptr的允许受控删除的实现?

如果编译器支持rvalue引用,而标准库实现实现了std::unique_ptr,则可以使用它。

否则,boost::scoped_ptr实现非常简单。最新版本少于100行简单代码。创建具有自定义删除器(通过模板参数静态或通过运行时提供的函数或函子)的派生程序非常简单。

票数 5
EN

Stack Overflow用户

发布于 2011-04-15 20:36:20

scoped_ptr不允许自定义删除器。我可以想象的主要原因是,如果它像sizeof(T*)一样保持一个boost::function<>,那么它的大小将不等于shared_ptr

我认为最可移植的选项是使用shared_ptr或编写支持删除器的自己的scoped_ptr

票数 3
EN

Stack Overflow用户

发布于 2014-12-27 19:06:46

您可以重载boost::checked_delete函数。

代码语言:javascript
复制
namespace boost {

template<>
void checked_delete (Foo* x)
{
    ....
}

} // namespace boost

重载后,scoped_ptr将调用checked_delete而不是delete。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5681489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档