gpt4 book ai didi

c++ - c++释放对象内存

转载 作者:行者123 更新时间:2023-11-28 03:14:31 25 4
gpt4 key购买 nike

void node::assign_childs()
{
node *childs;
childs = new node[8];
.
.
.
child_pointer = &childs[0];
}

我很难找到释放“child_pointer”内存的方法。 “child_pointer”在结构“节点”中定义,如下所示。

struct node{
vect p;
vect norm;
float s;
unsigned char r,g,b;
int fac_c;
vector<int> cfac;
bool isParent;
bool filled;

struct node* child_pointer;

node(vect, float , vect );
~node();

void assign_childs();

};

使用 delete 释放 child_pointer 似乎不起作用,我也试过 delete []。

我如何创建一个析构函数来从根节点向下递归地释放所有 child_pointers?

(这是一个八叉树,所以当我释放一个节点时,该节点内的所有节点也会被释放)

如果我必须更改分配/定义 child_pointer 的方式,以便释放它。我该怎么做?使用 8 个指针的数组不是替代方案,因为它会占用大量内存。

这是我试过的析构函数。

node::~node(){
if (child_pointer != NULL){
delete [] child_pointer;
}
}

这样做会使我的程序因段错误而崩溃。

node *octree(...);
.
.
.
delete octree;

最佳答案

只需在析构函数中添加以下内容:

delete[] child_pointer;

删除会调用子项的析构函数,他们的删除会调用子项的子项的析构函数等。

仅显示如何使用 delete 和 delete[]:

int *foo = new int;
delete foo;

int *bar = new int[42];
delete[] bar;

关于c++ - c++释放对象内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17353304/

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