shared_ptr对象全局删除
shared_ptr object global deletion
我想使用像std库的shared_ptr这样的智能指针,但在可以为每个共享该对象的sharedptr删除该对象而不删除那些指针。
例如,如果我使用std::shared_ptr
shared_ptr<A> p1 = make_share<A>();
shared_ptr<A> p2 = shared_ptr<A>(p1);
p1.reset();
// now p2 still contain the object of type A
// instead of nullptr
有没有办法做到这一点,或者是否存在一些替代方案?我做错了吗?
当然。std::shared_ptr
附带了std::weak_ptr
,这是一个指针,可以指向由一组std::shared_ptr
管理的对象,并检查它是否仍然活动,但不会延长对象的生存期。
您只需要保留对象的原始std::shared_ptr
,并将std::weak_ptr
借给该对象的其他用户。当对象必须被销毁时,重置std::shared_ptr
,所有剩余的std::weak_ptr
s将能够告知(当用户试图锁定它们时,它们将返回空std::shared_ptr
s(。
相关文章:
- 从函数中全局删除并重新实例化数组结构,而无需在编译时知道数组的大小
- 删除全局隐式函数 - 避免使用不明确的运算符
- 除了调用全局删除运算符之外,删除一个void指针还能做什么呢
- 为什么自删除的全局 Vulkan 实例仅在添加层时才导致段错误?
- 如果 LTO 中的代码依赖于其构造的副作用,是否允许 LTO 删除未使用的全局对象?
- 重载运算符 new/new[] 删除/删除[] 全局C++
- QML:如何删除全局 QSGTexture 对象
- 有没有一种方法可以全局填充新分配/删除分配
- 全局删除的冲突重载
- JNI检测到应用程序中的错误:使用已删除的弱全局参考
- MINGW中的全局超载操作员新/删除
- 使用Dynamic Lib使用全局新和删除
- 从全局向量中删除的元素的生存期
- 忽略全局覆盖的新建/删除
- 删除全局数组时堆损坏
- C++自定义全局新建/删除覆盖系统库
- 分配给 cpp 中定义的全局静态变量的内存是否在 C++ 中删除其类的实例后释放
- 与覆盖全局新建和删除运算符有关的问题
- 全局静态常量shared_ptr被另一个shared_ptr的析构函数奇怪地窃取和删除,为什么?
- shared_ptr对象全局删除