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

How can I delete objects through a shared pointer to a tuple

本文关键字:共享 指针 删除 对象 元组 何通过      更新时间:2023-10-16

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

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();