如何正确删除基类元素
基类:
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个项目。
答案 0 :(得分:1)
在行delete myTree;
之后,指针myTree
变为无效,因为它指向释放的内存。你无法取消引用它。
至于删除基类对象,只需要在基类中实现一个虚拟析构函数:virtual ~node( );
。