类数组 - 删除操作

时间:2012-12-09 18:13:06

标签: c++ heap

我有这段代码:

 Derived **args = new Derived*[2];
 args[0] = new Derived();
 args[0]->setname("BLABLA \n");
 cout << args[0]->getname();
 delete args[0];

 args[1] = new Derived();
 args[1]->setname("BLABLABLA\n");
 cout << args[1]->getname();
 delete args[1];
 delete [] args;

是否需要delete [] args?为什么?

另外,Derived **args = new Derived*[2]到底做了什么?它是否为Derived的两个指针分配空间?如果是这样,那么如何动态创建一个包含堆上Derived类型的2个对象的数组?

1 个答案:

答案 0 :(得分:1)

  

是否需要delete [] args?为什么?

是的。它释放了new Derived*[2]分配的内存。

  

另外,Derived **args = new Derived*[2]到底做了什么?

它为两个指针分配空间到Derived。它不会为任何Derived 对象分配空间

  

如何在堆上动态创建包含2个Derived类型对象的数组?

只需删除一个级别的间接:

 Derived *args = new Derived[2];

 args[0].setname("BLABLA \n");
 cout << args[0].getname();

 args[1].setname("BLABLABLA\n");
 cout << args[1].getname();

 delete [] args;

但请记住,数组和多态不会混合。有关详细信息,请参阅How to make an array with polymorphism in C++?