2014-05-15 44 views
1

ALLOCA()用於分配從棧存儲器,其在到達範圍的結束時自動釋放。與此同時,C++中的自動指針可以確保堆棧中堆動態分配的內存自動釋放。可以用alloca()替換C++中的自動指針嗎?

難道是正確的說法是ALLOCA()提供了自動回收的類似的功能通過自動指針提供?

+3

你的前提是錯誤的。由'alloca'分配的內存在周圍*函數*的末尾被釋放。 –

+3

'alloca'不是可移植的,它不是C,POSIX或任何其他標準的一部分,它依賴於編譯器。應該避免使用它。當然,即使內存在函數末尾「自動」分配,它也不會(就像'malloc')在分配/釋放時調用任何構造函數或析構函數。 –

回答

2

沒有,一點都沒有,那將是完全錯誤的。用C智能指針++目的(unique_ptrshared_ptr和過時且不適用auto_ptr)是自己的內存分配的自由存儲區,即具有new分配的對象(雖然有一定的靈活性)。特定於供應商的alloca在調用堆棧上分配內存(不是對象),而不是在免費商店中。

在標準alloca的最接近的類似物是可變長度數組的C,但C++甚至沒有那。即使這樣的語義是不同的,因爲在C和C++的名稱是局部的,但alloca語義沒有系統地綁範圍(而是功能)。如果您願意,可以將alloca視爲提供「動態大小的局部變量」,但這種類比有許多缺陷。