void node::assign_childs()
{
node *childs;
childs = new node[8];
.
.
.
child_pointer = &childs[0];
}
我很难找到释放“child_pointer”记忆的方法。 “child_pointer”在struct“node”中定义,如下所示。
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似乎不起作用,我也尝试删除[]。
如何创建析构函数以从根节点递归地释放所有child_pointer?
(这是一个八叉树,所以当我释放一个节点时,该节点中的所有节点也会被释放)
如果我必须改变我分配/定义child_pointer的方式,以便可以释放它。我该怎么做?使用8个指针的数组不是替代方案,因为它将使用大量内存。
这是我尝试过的析构函数。
node::~node(){
if (child_pointer != NULL){
delete [] child_pointer;
}
}
执行此操作会导致我的程序崩溃。
node *octree(...);
.
.
.
delete octree;
答案 0 :(得分:2)
只需在析构函数中添加以下内容:
delete[] child_pointer;
删除将调用孩子的析构函数,他们的删除将调用孩子的孩子的析构函数等。
只显示如何使用删除和删除[]:
int *foo = new int;
delete foo;
int *bar = new int[42];
delete[] bar;