如何正确删除基类元素

时间:2015-08-13 18:52:33

标签: c++ polymorphism

如何正确删除基类元素

基类:

class node
{
private:
    node *left, *right, *parent;
public:
    node(node* parent,node* left,node* right);
};

子类:

class nodeFunc: public node
{
private:
    int x;
public:
    nodeFunc(int x, node* parent, node* left, node* right);
};

类,其中包含vector:

class tree
{
private:
    vector<node*> nodes;
public:
    tree(int size);
    ~tree();
};

在构造函数中:

tree::tree(int size)
{
    for (int i = 0; i < size; i++)
        nodes.push_back( new nodeFunc(i,NULL,NULL,NULL) );
}

tree::~tree()
{
    for (vector<node*>::iterator it=nodes.begin();it!=nodes.end();++it)
    {
        delete (*it);
    }
    nodes.clear();
}

在main.cpp中:

int main()
{
    tree* myTree = new tree(10);
    delete myTree;
    cout<<"end"<<endl;
}

我使用调试器来查看每一行中发生的事情。首先,myTree-&gt;节点包含10个元素。删除myTree-&gt;节点后包含58个项目。

1 个答案:

答案 0 :(得分:1)

在行delete myTree;之后,指针myTree变为无效,因为它指向释放的内存。你无法取消引用它。

至于删除基类对象,只需要在基类中实现一个虚拟析构函数:virtual ~node( );