0

C ++で変数を複数回初期化すると、メモリの場所はどうなりますか?例えば:

LPWSTR sampleString = new whcar_t[10];
//some operations here
sampleString = new wchar_t[2];
//some operations here
sampleString = new wchar_t[25];
//some operations here

を使用してメモリを削除するdelete [] sampleString;と、関連するすべてのメモリ位置がクリアされますか?

4

5 に答える 5

5

いいえ、最後のものだけです。残りはすべて永遠に失われます。これがいわゆる「メモリリーク」です。

于 2012-07-13T06:56:32.583 に答える
2

いいえ、それぞれnew[]を個別にペアリングする必要がありますdelete[]

あなたの例では、最初の2つの割り当ては失われます。メモリリーク。

于 2012-07-13T06:57:14.990 に答える
0

いいえ、以前に割り当てられたすべてのメモリが失われます。スマートポインタの使用を検討する必要があります

于 2012-07-13T06:57:19.500 に答える
0

notice that using a smart pointer is good if you point it to an object and NOT an array.
if you wrap the array with struct/class that will be ok. you can also use STL Vector (with a smart pointer of your choice)

于 2012-07-13T07:09:46.350 に答える
0

delete [] sampleString; を使用してメモリを削除すると、関連するすべてのメモリ位置がクリアされますか?

いいえ、どのようにして sampleString は一度に 1 つの参照しか保存できないので、それを送信したときにdelete []最後のものだけを知ることができますか。

C++デフォルトではガベージコレクションがないため、手動で割り当て/割り当て解除するときは、手動でメモリ管理を行う必要があります。

一部の人が指摘しているように、スマートポインターを使用することをお勧めします。

于 2012-07-13T07:16:46.667 に答える