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]実際には何をしますか?2つのポインタにスペースを割り当てますDerivedか?もしそうなら、ヒープ上にDerivedタイプの2つのオブジェクトを含む配列を動的に作成するにはどうすればよいですか?

4

1 に答える 1

1

delete []引数は必要ですか?なぜ?

はい、そうです。によって割り当てられたメモリを解放しますnew Derived*[2]

また、Derived **args = new Derived*[2]実際には何をしますか?

に2つのポインタ用のスペースを割り当てますDerivedDerived オブジェクトにスペースを割り当てません。

Derivedヒープ上にタイプの2つのオブジェクトを含む配列を動的に作成するにはどうすればよいですか?

1レベルの間接参照を削除するだけです。

 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 に答える