2012-07-13 35 views
0

當我用C++初始化一個變量不止一次時,內存位置會發生什麼變化?例如:當一個數組在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;內存將所有相關的存儲位置被清除?

+0

如果您對中的每個'新[]'用'刪除[]',你應該罰款,並且如前所述,先下一'新[]'這樣做。一旦你再次使用'new []',舊的內存區域就會丟失,但是如果你不刪除[]',它仍然不是空閒的。 – chris 2012-07-13 06:56:52

+1

@chris,還不夠。你應該配對它們,並且確保在每個'new'之後,在下一個'new'之前調用'delete'。 – littleadv 2012-07-13 06:57:59

+0

@littleadv,哎呀,我的意思是,但它沒有太清楚。我把它修理了一下。 – chris 2012-07-13 06:58:42

回答

5

不,只有最後一個。其餘的將永遠失去。這就是所謂的「內存泄漏」。

+0

將首先分配兩次的內存自動釋放,還是會自動釋放無法使用? – 2012-07-13 07:08:31

+1

這對你來說是不可用的(其他進程的可用性取決於操作系統內存管理) – littleadv 2012-07-13 07:09:51

+0

@ user921207,C++沒有垃圾收集器。你可以做的最好的是智能指針,它們可以在不同情況下自行釋放內存。 – chris 2012-07-13 07:10:09

2

不行,你得對的每個new[]設有獨立delete[]

在您的例子,前兩個分配將會丟失。內存泄漏。

+0

請參閱我對chris的評論。儘管知道答案的人會理解你的意思,但不知道的人可能不會。 – littleadv 2012-07-13 06:58:48

0

不,你以前分配的所有內存都會丟失。你應該考慮使用智能指針

0

通知,使用智能指針是好的,如果你點它的對象,而不是一個數組。
如果你用struct/class包裝數組就可以了。 你也可以使用STL向量(帶有你選擇的智能指針)

0

如果我用delete [] sampleString刪除內存;將清除所有關聯的內存位置?

不,它怎麼可以sampleString一次只能存儲一個引用,所以當你發送它到delete []它只知道最後一個。

由於C++默認情況下沒有垃圾收集你必須手動照顧內存管理,當手動分配/解除分配。

正如一些已經指出了這一點,你可能想使用智能指針。

相關問題