2012-03-29 83 views
0

我在這裏停留在我的C++的書有以下問題:「什麼不使用新的要求你也呼籲刪除」新的使用要求您還需要調用delete嗎?

也許你有一個答案呢?

+0

答案肯定會在你的書中。雖然有人可以(也將會)在此提供,但自己回答並不難。如果您已經這麼做但想要確認,請編輯問題並告訴我們您爲什麼這麼做。 – Jon 2012-03-29 06:37:11

+0

我一直在尋找它,這只是討論問題 – Sebastian 2012-03-29 06:37:50

+0

我認爲你的意思是「爲什麼」,而不是「什麼」。 – Wyzard 2012-03-29 06:41:04

回答

1

因爲這是C++設計的方式&這是預期的行爲。
意圖是提供一個內存分配,你需要和擁有,直到你明確地重新調整它。

new給你一個動態內存分配(在堆上),它將繼續存在,你擁有它,直到你明確地釋放它,通過調用delete
未能在new ed緩衝區上調用delete將導致 未定義的行爲通常以 的形式。 1內存泄漏。

1這被討論了here

+0

哦,好吧我想這就是他們正在尋找的內存泄漏的想法,如果你不再次刪除對象。 – Sebastian 2012-03-29 06:38:56

+2

這是不正確的。沒有未定義的行爲來調用'delete',並且有些情況下(例如單例)你不想在'new'內存中調用'delete'。 – 2012-03-29 07:21:53

1

當您執行new時,OS會將內存分配給您指定的指針。使用完成後,您可能不再需要它了。但內存仍被標記爲「正在被操作系統」使用。

現在,當指針在函數或任何其他塊({})的作用域中聲明時,當塊的執行結束時,它將被刪除(只有指針將被刪除)。在這種情況下,使用new分配的內存仍被OS標記爲「正在使用」,並且未分配給調用new或變量的任何其他指針。這會導致RAM中的孤立內存塊,永遠不會被使用,因爲它的指針已從內存中移除,但會佔用內存塊。

這被稱爲內存泄漏。一些這樣的塊可能會讓你的應用程序不穩定。

您使用delete釋放這樣的內存塊,減輕操作系統,以便它可以爲其它請求

1

有一個在C++沒有垃圾收集器可以很好地使用,因此,你是負責釋放所分配的內存。無論如何,操作系統「知道」你的程序分配了什麼內存。所以當你的程序退出時,操作系統再次對內存負責。但是如果你有一個長時間運行的C++程序,並且從來不會調用delete,那麼沒有人會幫你擺脫垃圾。

+0

您可以在C++中使用垃圾收集器。但是'delete'不僅僅是簡單的內存管理,它也調用析構函數。即使使用垃圾收集器,通常也需要使用'delete'。 – 2012-03-29 07:24:26

1

調用new爲對象分配了內存,並且還安排了該對象的構造函數被執行。

您可以通過調用free()來釋放內存,但實際上應該使用delete來釋放由new分配的內存,因爲這也會導致對象析構函數被執行。

相關問題