Class* var[50];
var[0] = new SubClass();
delete[] *var;
これは未定義の動作です。適切な方法は
delete var[0]; //equivalent to delete *var;
配列の50個の要素すべてにメモリを割り当てる場合は、それぞれを繰り返して削除する必要があります。このように考えてください:
- ごと
newに、関連付けられている必要がありますdelete
- ごと
new[]に、あなたは仲間を持っている必要がありますdelete[]
- 未定義の動作につながるため、と混同
newしないでくださいdelete[]new[]delete
2番目のスニペットは不正なC++です。
編集あなたは明らかに初心者なので、これを少し分解してみましょう。2番目のスニペットはコンパイルすらできないので、最初のスニペットに焦点を当てます。
Class* var[50];
これは、への50個のポインタの配列を宣言しClassます。ポインタはぶら下がっています-それらは初期化Classされておらず、オブジェクトは作成されていません。
var[0] = new SubClass();
これにより、オブジェクトにメモリが割り当てられSubClass、配列の最初のポインタが割り当てられます。他のすべてのポインタは初期化されないままです。
*var;
最初の要素であるを返しますClass*。と同等var[0]です。
delete[] *var;
で割り当てられdelete[]たを呼び出そうとするため、未定義の動作が発生します。Class*new