2012-09-15 68 views
1

如果我使用「new」爲函數中的本地字符數組分配新內存,是否有必要在函數返回之前使用delete?當變量是本地時是否需要刪除?

函數返回後不會自動刪除它嗎?

+1

考慮添加一些支持代碼,因爲它比「如果我要分配......使用新的......」更容易一眼看出。我也希望有人說一些關於變量和對象的東西。 – 2012-09-16 00:04:38

+1

無論如何,你幾乎不應該使用'new'作爲局部變量。改用一個值對象。 –

回答

6

是的,這是必要的:如果你在動態存儲上分配了newnew[]的東西,編譯器不知道你沒有計劃在函數返回後傳遞分配的對象,所以你有責任請致電delete(或delete[])以釋放您已分配的對象。

您可以使用unique_ptr<T>來避免顯式地調用delete,但是您的代表將會由unique_ptr<T>的析構函數進行調用。

+0

考慮到OP即將分配一個動態數組*,似乎也提到'unique_ptr ',它調用正確的'delete []'來銷燬數組。 –

+0

@KerrekSB好點,謝謝! – dasblinkenlight

3

是的,分配new的變量不是當功能返回時自動釋放,仍然需要刪除。

1

是的,是的,是的,是的,是的。除非您使用的智能指針如auto_ptrboost::shared_ptr,否則您必須使用delete來取消分配內存。

因爲new在堆上分配,不依賴於當前堆棧幀,所以當C++銷燬當前堆棧幀時不分配內存。如果您使用new,則必須始終使用delete。期。

+3

'auto_ptr'已被棄用(但仍適用於此用例),'shared_ptr'對於這種情況是過分的。 'unique_ptr'或'boost :: scoped_ptr'更適合這個目的。 – Praetorian

+0

@Prætorian:好的建議。我知道'auro_ptr'已被棄用,我只想要一些智能指針的例子。 – Linuxios

相關問題