1

我有这个代码:

 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?如果是这样,那么如何在堆上动态创建一个包含 2 个 Derived 类型的对象的数组?

4

1 回答 1

1

delete []需要args吗?为什么?

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

另外,Derived **args = new Derived*[2]真正的作用是什么?

它为两个指向Derived. 它不为任何Derived 对象分配空间。

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

只需删除一级间接:

 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;

但请记住,数组和多态性不能混用。有关详细信息,请参阅如何在 C++ 中创建具有多态性的数组?

于 2012-12-09T18:15:52.050 回答