2

任意のサイズ、次元、および型の動的配列を破棄するにはどうすればよいですか? delete[] は 2 次元配列のレベルを自動的に下りますか、それともポインタの最初のレベルを削除するだけなので、プログラムは各配列レベルを手動で反復する必要がありますか?

理想的には、1 ~ 4 次元の配列を破棄する単一のコマンド (テンプレート クラスで使用するため) が必要です。配列の次元数を確認する方法があれば、それも機能します。

double* ar = new double[100]; などの動的配列を使用しています。

4

4 に答える 4

1

C++ を使用している場合はstd::vector、 andを使用しstd::unique_ptrます。

于 2012-10-18T10:26:26.993 に答える
0

基本的1 new = 1 deleteに と10 new = 10 delete、割り当てたものはすべて削除する必要があるため、呼び出される操作の数は等しくなければなりません。

(コンパイラ/プログラムの観点から)何が実際のデータポインタなのか、何がゴミなのか、どこで参照されているのか(そして使用されるのか)などを知る方法はありません。

于 2012-10-18T10:33:04.843 に答える
0

のように 2 次元配列をインスタンス化new int[10][20]するdelete[]とすべての配列が破棄されますが、そのように反復して作成した場合は、myarray[i] = new int[20]各次元を破棄するためにもう一度反復する必要があります。

配列を破棄する方法がわからない場合は、STL ベクトルを使用することをお勧めします。

于 2012-10-18T10:22:17.343 に答える
0

それらを削除するには、すべてのレベルを手動で繰り返す必要があります。
寸法を確認する方法があれば、それを使用して正しい破壊プロセスを選択できます。

また、ベクトルを使用しないのはなぜですか? それらは高速で、範囲外になると自動的に割り当て解除されます

于 2012-10-18T10:15:43.157 に答える