回答
是的,這是必要的:如果你在動態存儲上分配了new
或new[]
的東西,編譯器不知道你沒有計劃在函數返回後傳遞分配的對象,所以你有責任請致電delete
(或delete[]
)以釋放您已分配的對象。
您可以使用unique_ptr<T>
來避免顯式地調用delete
,但是您的代表將會由unique_ptr<T>
的析構函數進行調用。
考慮到OP即將分配一個動態數組*,似乎也提到'unique_ptr
@KerrekSB好點,謝謝! – dasblinkenlight
是的,分配new
的變量不是當功能返回時自動釋放,仍然需要刪除。
是的,是的,是的,是的,是的。除非您使用的智能指針如auto_ptr
或boost::shared_ptr
,否則您必須使用delete
來取消分配內存。
因爲new
在堆上分配,不依賴於當前堆棧幀,所以當C++銷燬當前堆棧幀時不分配內存。如果您使用new
,則必須始終使用delete
。期。
'auto_ptr'已被棄用(但仍適用於此用例),'shared_ptr'對於這種情況是過分的。 'unique_ptr'或'boost :: scoped_ptr'更適合這個目的。 – Praetorian
@Prætorian:好的建議。我知道'auro_ptr'已被棄用,我只想要一些智能指針的例子。 – Linuxios
- 1. 是否需要刪除靜態向量?
- 2. Snow結束後是否需要刪除導出的變量
- 3. 是否需要刪除指定的變量?
- 4. 當數組縮小時,是否需要刪除元素?
- 5. 是否等待()需要同步本地變量
- 6. 字符串池是否需要本地變量?
- 7. 本地時間內存是否需要解除分配?
- 8. 當範圍被銷燬時,是否需要「解除」範圍變量?
- 9. 我是否需要刪除此對象?
- 10. 我是否需要刪除對象?
- 11. 是否需要局部變量?
- 12. pthread_once_t變量是否需要互斥鎖?
- 13. 當應用程序在背景上時,android是否清除本地變量
- 14. 我是否需要本地安裝MySQL?
- 15. 狀態monad是否需要/有用可變(本地)變量(如Scala)的語言?
- 16. 當我刪除父項本身時,是否需要刪除DOM元素的所有子項?
- 17. 當我更改其他會話變量時,是否需要刪除Coldfusion中的cookie
- 18. 用戶註銷後我們是否需要刪除會話變量?
- 19. 我是否需要刪除JavaScript中的回調中使用的局部變量?
- 20. 是否有一個工具來刪除不需要的,未使用的變量
- 21. 是否需要檢查js變量是否爲d3選擇?
- 22. 設置屬性值時是否需要使用臨時變量?
- 23. 是否需要變動?
- 24. 當我刪除元素時,是否需要在jQuery中分離事件
- 25. 我是否需要刪除臨時表上的索引?
- 26. 處理對象時是否需要刪除事件?
- 27. NSUserDefaults是否刪除臨時不需要的密鑰?
- 28. 安裝WAMP是否會刪除當前的本地數據庫?
- 29. 是否總是需要刪除MapReduce中的重複項?
- 30. 每當我做出改變時,我是否需要辭職APK?
考慮添加一些支持代碼,因爲它比「如果我要分配......使用新的......」更容易一眼看出。我也希望有人說一些關於變量和對象的東西。 – 2012-09-16 00:04:38
無論如何,你幾乎不應該使用'new'作爲局部變量。改用一個值對象。 –