回答
因爲這是C++設計的方式&這是預期的行爲。
意圖是提供一個內存分配,你需要和擁有,直到你明確地重新調整它。
new
給你一個動態內存分配(在堆上),它將繼續存在,你擁有它,直到你明確地釋放它,通過調用delete
。
未能在new
ed緩衝區上調用delete
將導致
到
未定義的行爲通常以
的形式。 1內存泄漏。
哦,好吧我想這就是他們正在尋找的內存泄漏的想法,如果你不再次刪除對象。 – Sebastian 2012-03-29 06:38:56
這是不正確的。沒有未定義的行爲來調用'delete',並且有些情況下(例如單例)你不想在'new'內存中調用'delete'。 – 2012-03-29 07:21:53
當您執行new
時,OS會將內存分配給您指定的指針。使用完成後,您可能不再需要它了。但內存仍被標記爲「正在被操作系統」使用。
現在,當指針在函數或任何其他塊({}
)的作用域中聲明時,當塊的執行結束時,它將被刪除(只有指針將被刪除)。在這種情況下,使用new
分配的內存仍被OS標記爲「正在使用」,並且未分配給調用new
或變量的任何其他指針。這會導致RAM中的孤立內存塊,永遠不會被使用,因爲它的指針已從內存中移除,但會佔用內存塊。
這被稱爲內存泄漏。一些這樣的塊可能會讓你的應用程序不穩定。
您使用delete
釋放這樣的內存塊,減輕操作系統,以便它可以爲其它請求
有一個在C++沒有垃圾收集器可以很好地使用,因此,你是負責釋放所分配的內存。無論如何,操作系統「知道」你的程序分配了什麼內存。所以當你的程序退出時,操作系統再次對內存負責。但是如果你有一個長時間運行的C++程序,並且從來不會調用delete,那麼沒有人會幫你擺脫垃圾。
您可以在C++中使用垃圾收集器。但是'delete'不僅僅是簡單的內存管理,它也調用析構函數。即使使用垃圾收集器,通常也需要使用'delete'。 – 2012-03-29 07:24:26
調用new爲對象分配了內存,並且還安排了該對象的構造函數被執行。
您可以通過調用free()來釋放內存,但實際上應該使用delete來釋放由new分配的內存,因爲這也會導致對象析構函數被執行。
- 1. 如果您使用SSL,還需要使用摘要式身份驗證嗎?
- 2. 使用Solr,我還需要SQL db嗎?
- 3. 使用AJAX請求時,我還需要Form元素嗎?
- 4. 要求文件使用dirname(__ FILE__)還是隻需要文件名?
- 5. 使用XmlRootAttribute類時需要刷新嗎?
- 6. json需要使用「新」動作嗎?
- 7. 要使Grails應用程序很好地擴展,您需要使用EJB嗎?
- 8. 要調用需要IntPtr的方法,最好使用/ unsafe還是Marshal.AllocHGlobal?
- 9. 我需要使用NSLock嗎?
- 10. 我需要使用NSKeyedArchiver嗎?
- 11. 使用jQuery的$ Post時,您需要擔心緩存嗎?
- 12. 您是否需要使用Invoke on Action?
- 13. SimpleDateFormat - 您是否需要使用RegEx?
- 14. 當Apple要求強制使用https時,ios webview需要使用https嗎?
- 15. 我們還需要Richter的AsyncEnumerator嗎?
- 16. 您是否需要指定使用最新的框架版本?
- 17. 您需要使用theme.appcompat主題 - 但我是,不是嗎?
- 18. Jquery Ajax調用需要暫停嗎?
- 19. SqlCeResultSet.Close - 我需要調用它嗎?
- 20. GLSurfaceView:我需要調用onPause/onResume嗎?
- 21. 我需要在OCaml中調用Random.self_init嗎?
- 22. RestoreDC之後需要調用TCanvas.Refresh嗎?
- 23. 超時後我需要調用EndInvoke嗎?
- 24. 如果我使用fonts.com,還是需要woff或eot嗎?
- 25. 使用ARC時還需要釋放任何內存嗎?
- 26. CSS3:我們還需要使用瀏覽器前綴嗎?
- 27. 對於FCGI,還需要使用'狀態:404 Not Found'嗎?
- 28. 我還需要在nodejs中使用'select ... for update'嗎?
- 29. 我可以只使用會話嗎?還是需要ACL?
- 30. 使用畢加索時,我還需要保存圖像嗎?
答案肯定會在你的書中。雖然有人可以(也將會)在此提供,但自己回答並不難。如果您已經這麼做但想要確認,請編輯問題並告訴我們您爲什麼這麼做。 – Jon 2012-03-29 06:37:11
我一直在尋找它,這只是討論問題 – Sebastian 2012-03-29 06:37:50
我認爲你的意思是「爲什麼」,而不是「什麼」。 – Wyzard 2012-03-29 06:41:04