[英]C++ allocation standard?
假設我有一個Foo類和一個功能欄
void Bar(void)
{
Foo a();
}
這是否意味着不必在主內存中分配a? 還是這取決於編譯器,所以編譯器可能會分配內存並產生與我們編寫Foo* a=new Foo
相同的結果
Foo a();
是一個函數聲明。 應該是Foo a
; 並且a
在堆棧的內存中。
您要查找的術語是一個自動變量 。 這意味着該變量中包含的對象可以保證在作用域結束時自動銷毀。
使用new
,僅在顯式delete
對象時(或通過顯式使用用於銷毀對象的機制,如智能指針)將其銷毀。 換句話說,壽命是手動管理的。
當然,自動生存期語義在任何情況下都與手動語義不同。 話雖如此,兩種情況下的存儲位置(堆棧,堆,寄存器或其他內容)都是無關緊要的。
從技術上講,如果a
寄存器適合寄存器,則最終可能會完全使用“無內存”。 否則,它將在堆棧中分配,即所謂的“主內存”,與Foo *a = new Foo;
的內存類型相同Foo *a = new Foo;
,但使用不同的部分[ new
使用堆內存,堆棧與堆不相同,而是相同的內存類型]。
當然,如果類Foo
包含構造函數,則它本身可以調用new
各種形式的其他函數,這些函數可能會或可能不會更改內存的使用...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.