簡體   English   中英

C ++分配標准?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM