gpt4 book ai didi

c++ - 如何释放成员的所有派生动态内存?

转载 作者:搜寻专家 更新时间:2023-10-31 01:35:07 25 4
gpt4 key购买 nike

假设我有一个类:

struct foo{
foo* bar=nullptr;
};

现在如果我使用 new 像链一样分配内存:

foo instance;
instance.bar= new foo;
instance.bar->bar=new foo;
...

那么我怎样才能在一次删除顶级instance的调用中删除instance的所有子级,即当我调用destroy(instance);//dummy name 然后所有那些动态分配的内存都被释放了?

最佳答案

您可能会习惯 std::unique_ptr(或 std::shared_ptr,如果需要的话):

#include <memory>
struct foo{
std::unique_ptr<foo> bar;
};

int main() {
// Please do not use '_' as a variable name.
// (Some people do: #define _(T) gettext(T) // for gnu gettext support)
foo _;
_.bar = std::make_unique<foo>();
_.bar->bar = std::make_unique<foo>();
// ... the destructor will deallocate.
}

但是,假设 foo 有一个数据成员(结构)T,你可以考虑一个单链表:

#include <forward_list>
std::forward_list<T> foo_list;

这会导致相关问题,例如:Remove all nodes in linked list

关于c++ - 如何释放成员的所有派生动态内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37896315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com