2012-12-07 51 views
1

我想學習C++的最佳習慣和做法,特別是周圍的內存管理。通過在我的iOS應用程序中使用ARC以及Java中的內置GC以及啓用GC的一些其他語言,我已經被寵壞了。刪除自動int變量

我知道您使用deletedelete[]來解構指針。我的問題是,你怎麼delete整數,或基礎數據類型的其他變量?

我首先想到的是,由於delete似乎只與指針的工作,我可以這樣做:

int intToDelete = 6; 
delete &intToDelete; 

因此,基本上,你可以創建一個指向內存中的整數,並刪除使用該整數指針?

+6

您不要刪除'intToDelete'。當它超出範圍時,它就不復存在。自動。 –

+3

我要回答,但後來意識到我會寫一些非常類似於[這個](http://stackoverflow.com/questions/8839943/why-does-the-use-of-new-cause-memory-leaks/8840302#8840302)。 –

+0

@ R.MartinhoFernandes,我看到你在那裏做了什麼。 – chris

回答

10

deletedelete[]只應與您分別用newnew[]分配的指針一起使用。特別是,每次使用new時,都應該有相應的delete。同樣,每個new[]都需要相應的delete[]。你不應該使用這些變量中沒有明確分配內存的變量。編譯器負責所有非指針變量的內存分配(和取消分配)。

+2

錯誤 - 每個'new'都需要一個智能指針,每個'delete []'都需要你讓三個同事審查你的代碼,以確保你不會因爲不使用'std :: vector '。 – Puppy

+0

你應該適當地重述那個。它非常含糊。 [我沒有downvote,雖然。] – asheeshr

+0

@DeadMG每個'新'*需要*智能指針?你是否說在沒有智能指針的情況下編寫正確的代碼是不可能的?即使有智能指針,「new」也有相應的「delete」,所以我的論文仍然沒有錯。 –

0

本地對象自動清理自己。這是該語言最有用的功能之一,因爲它也可以通過RAII擴展以涵蓋非本地對象。具體來說,delete的使用是大量的紅旗,你沒有使用正確的自動清理工具,delete[]更糟糕。

構建和破壞語義的正確使用對於編寫良好的C++代碼是必不可少的。如果你手動管理內存,那麼你做錯了,除非你有一個愚蠢的舊編譯器一些非常獨特的情況(我從來沒有見過任何實際證明這一點的例子)。

1

delete用於釋放由new運營商分配的堆中的存儲器,而delete[]new[]的對應部分。 您不能使用delete來釋放未由new分配的指針,即使是來自malloc的指針。

+1

你可以在大多數C++實現中使用malloc()分配的內存使用delete [],因爲對於基本類型它只是被覆蓋free()。但最好不要依賴這個。 –