c++ - 带有第二个删除器的 shared_ptr 链/分支

标签 c++ boost shared-ptr

我有一种情况需要知道 shared_ptr 的用户何时完成,即用户何时最终释放了它的所有拷贝。通常在这里只使用一个删除器,但在这种情况下有一个小问题。底层对象已经是一个 shared_ptr!

也就是说,在伪代码中:

shared_ptr<T> a( new T );
.
.
.
shared_ptr<T> b( a, bind( delete_func, id ) );

我正在从原始的 shared_ptr 生成一个新的分支。这个新的 shared_ptr b 可以像普通的 shared_ptr 一样被复制和使用,但是当这个特定的分支完成时必须调用 delete_func。现在,我不能在这里只使用 a.get(),因为这个新的 shared_ptr 也必须保留底层对象(它可能是它的最后一个 shared_ptr)。

我正在寻找一种无需彻底更改框架即可执行此操作的方法。有人看到一个好的简单解决方案吗?

我将 boost 库用于智能指针和绑定(bind)。

最佳答案

我想出了一个可能的解决方案。

像这样创建一个删除函数:

void delete_func( int id, shared_ptr<T> underlying );

然后链接 shared_ptr 这样做:

shared_ptr<T> b( a.get(), bind( &delete_func, id, a ) );

这将创建一个带有自定义删除器(我的分支)的新的独立 shared_ptr。其中一个参数是原始的 shared_ptr,因此它也应该维护底层的 shared_ptr 对象。现在我只需要稍微测试一下。

关于c++ - 带有第二个删除器的 shared_ptr 链/分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7926992/

相关文章:

c++ - 是否可以覆盖在 C++ 中获取结构成员的默认行为?

c++ - 在不知道 UTF-8 编码的情况下拆分空白字符上的 UTF-8 编码字符串

c++ - 无法在 direct2d 项目中初始化 IWICImagingFactory

c++ - boost 序列化: how to choose version at runtime?

c++ - 在 std::shared_ptr 中使用 = 运算符时,先前的指针是否被破坏?

c++ - weak_ptr 奇怪的复制构造函数

c++ - 在不使用循环和数组的情况下显示六个整数中的最小偶数和奇数

c++ - Boost::filesystem、std::sort:在排序过程中保留信息时遇到问题

c++ - 正确使用 Boost::ref ..?

c++ - typedef shared_ptr<T> 转换为 bool