带有第二个删除器的Shared_ptr链/分支
shared_ptr chain/branch with a second deleter
我有一种情况,我需要知道shared_ptr的用户何时完成,即用户何时最终释放了它的所有副本。通常在这里只使用deleter,但是在这种情况下有一个小问题。底层对象已经是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库的智能指针和绑定。
我想到了一个可能的解决方案。
创建一个delete函数:
void delete_func( int id, shared_ptr<T> underlying );
然后链接shared_ptr:
shared_ptr<T> b( a.get(), bind( &delete_func, id, a ) );
这将创建一个带有自定义删除器(my分支)的新的未附加的shared_ptr。其中一个参数是原始的shared_ptr,因此这也应该维护底层的shared_ptr对象。现在我只需要稍微测试一下
我不太明白为什么你想有两个单独的shared_ptr
层,为什么不只是提供适当的删除器,将通知你,然后调用指针上的checked_deleter
?这样,您只需要一个删除器,您又回到了为shared_ptr
提供一个删除器的简单问题。
相关文章:
- IPC使用多个管道和分支进程来运行Python程序
- 如何删除peer if else分支中的冗长句子
- 如何确保在使用基于布尔值的两个方法之一调用方法时避免分支预测错误
- CLANG 编译器 说:变量"PTR"可能未初始化
- 如何正确地将分支添加到已存在的树中
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 如何将分支添加到已存在的TTree:ROOT
- 将 ptr 传递给 ptr 到 A 作为参数传递给 A 的函数是不好的做法吗?
- 如何删除 LLVM 中的不规则分支?
- 为共享 ptr 向量实现复制 c'tor?
- 字符和整数中 **(ptr+1) 的值差异
- C++:在不中断共享的情况下通过引用传递共享 PTR?
- 如果以下行不包含决策或分支,GDB 无法单步跳过函数
- 如何将派生类从基 ptr 分配给 nlohmann::json
- 函数指针与条件分支
- 引用 std::shared:ptr 以避免引用计数
- 分支未在 Linux 上采用
- 如何删除分支因子不一致的树,最大为 30,40
- std::shared_ptr vs std::make_shared:意外的缓存未命中和分支预测
- 更改 git 分支名称后,在项目的 Visual Studio 代码中丢失智能感知(建议,转到定义C++