如何通过指向元组的共享指针删除对象

时间:2018-08-10 08:37:29

标签: c++ c++11

我们具有以下格式的数据结构:

std::shared_ptr<std::tuple<std::shared_ptr<Aclass>, std::shared_ptr<BClass>>>;

auto ret = method();

其中一个方法返回上述类型的数据类型-如何删除Aclass和Bclass,或者如何访问该类的每个指针并显式删除它们?

2 个答案:

答案 0 :(得分:1)

std::get<0>(*ret).reset();std::get<1>(*ret).reset();可以解决问题。

std::get用于从元组中获取元素:https://en.cppreference.com/w/cpp/utility/tuple/getreset递减指针拥有的对象的引用计数器: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();