我有这段代码:
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个对象的数组?
答案 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++?