在c ++中释放对象的内存

时间:2013-06-27 21:13:25

标签: c++ memory

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;

1 个答案:

答案 0 :(得分:2)

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

delete[] child_pointer;

删除将调用孩子的析构函数,他们的删除将调用孩子的孩子的析构函数等。

只显示如何使用删除和删除[]:

int *foo = new int;
delete foo;

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