我们具有以下格式的数据结构:
std::shared_ptr<std::tuple<std::shared_ptr<Aclass>, std::shared_ptr<BClass>>>;
auto ret = method();
其中一个方法返回上述类型的数据类型-如何删除Aclass和Bclass,或者如何访问该类的每个指针并显式删除它们?
答案 0 :(得分:1)
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最终销毁。 / p>
答案 1 :(得分:0)
您只需要在要删除的共享指针上调用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();