如何通过指向元组的共享指针删除对象
How can I delete objects through a shared pointer to a tuple
我们有以下格式的数据结构:
std::shared_ptr<std::tuple<std::shared_ptr<Aclass>, std::shared_ptr<BClass>>>;
auto ret = method();
该方法之一返回上述类型的数据类型 - 如何删除 Aclass 和 Bclass,或者更确切地说,如何访问类的每个指针并显式删除它们?
std::get<0>(*ret).reset();
和std::get<1>(*ret).reset();
就可以了。
std::get
用于从元组获取元素:https://en.cppreference.com/w/cpp/utility/tuple/get 和reset
递减指针拥有的对象的引用计数器:https://en.cppreference.com/w/cpp/memory/shared_ptr/reset 最终销毁。
您只需要在要删除的任何共享指针上调用reset
即可。请注意,除非引用计数达到 0,否则不会立即删除基础对象。 例如:
std::shared_ptr<std::tuple<std::shared_ptr<Aclass>, std::shared_ptr<BClass>>> ret = method();
// delete AClass
std::get<0>(*ret).reset()
// delete BClass
std::get<1>(*ret).reset()
// delete the whole tuple including AClass and BClass if they haven't already been reset.
ret.reset();
相关文章:
- 如何从具有移动语义的类对象中生成共享指针
- 使用共享指针的函数调用,其对象应为 const
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 如何访问由共享指针保存的类方法?
- 从矢量或地图中删除共享指针
- 使用共享指针时,从共享指针本身释放内存的机制是什么
- 使用共享指针实现复制 c'tor?
- 共享指针继承,而不先显式强制转换
- 如何检查类中共享指针的有效性?
- std::排序在共享指针的向量上
- 将相同共享指针的副本存储在不同的向量中是否是一种好的做法?
- 嵌套类、继承和C++中的共享指针
- 制作一对共享指针并推送一个向量
- 如何将共享指针用作函数参数
- 是否可以/希望创建不可复制的共享指针模拟(以启用weak_ptr跟踪/借用类型语义)?
- 尝试通过共享指针使用变量时读取访问冲突
- 如何将元素插入到标准::地图的共享指针中?
- 共享指针生存期
- 初始化可变数据结构中的共享指针向量
- 阻止在返回时复制共享指针