私はこのようなコードを書いています:
while(true) {
int array[5];
// do something
}
ループの各ターンで、配列は新しい配列になります。ループの最後でアレイを削除する必要がありますか?
私はこのようなコードを書いています:
while(true) {
int array[5];
// do something
}
ループの各ターンで、配列は新しい配列になります。ループの最後でアレイを削除する必要がありますか?
ループの終わりに配列を削除する必要がありますか?
いいえarray
、自動保存期間があるため、削除する必要はありません。各whileループから抜けると解放されます。
delete [] / new []
、delete / new
をペアで呼び出す必要があります。
いいえ。
スタックで宣言された変数は、手動で割り当てを解除する必要はありません。配列のスコープはwhile
ループ内です。ループが繰り返されるたびに、配列はスタックに割り当てられ、自動的に割り当てが解除されます。
で宣言された配列のみをnew[]
手動で割り当て解除する必要がありますdelete[]
また、宣言する配列はstatic
いかなる意味でもありません。キーワードはCで特定のstatic
意味を持ちます。宣言した配列は、実際にはauto
(自動ストレージ)変数として格納されます。つまり、スコープ外になると自動的に割り当てが解除されます。
他の回答では、配列がスタック上にあるため a は不要であると正しく説明されていdelete
ますが、スタックが何であるかは説明されていません。ここに非常に優れた説明があります:スタックとヒープとは何ですか?
あなたの質問に当てはまるように、C および C++ では、コンパイラに別の方法で明示的に指示しない限り、変数はスタックに配置されます。つまり、変数は宣言されているスコープ (つまり、ブロック) 内にのみ存在します。ヒープに何かを置くようにコンパイラーに明示的に指示する方法は、malloc
(C の方法) またはnew
(C++ の方法) のいずれかです。free
その場合にのみ、( C の場合) またはdelete
/ delete[]
(C++)を呼び出す必要があります。
スタックに割り当てられた配列またはオブジェクトを削除することはできません (複雑なアセンブリを使用しない限り)。
何らかの理由で、作成したアレイを削除する必要がある場合:
int *array = new int[5];
//do something
delete[] array;
std::vector
また、配列の代わりに使用することをお勧めします。