D的文檔說當你使用局部變量的scope
時,它們將被分配到棧上(即使你分配了class
實例)。但關於auto
關鍵字呢?它是否保證實例將被分配到棧上?D1的內存分配的自動和範圍差異
void foo() { auto instance = new MyClass();}
void foo() { scope instance = new MyClass();}
所以我認爲,這兩個語句是相等的(在分配方面)?
D的文檔說當你使用局部變量的scope
時,它們將被分配到棧上(即使你分配了class
實例)。但關於auto
關鍵字呢?它是否保證實例將被分配到棧上?D1的內存分配的自動和範圍差異
void foo() { auto instance = new MyClass();}
void foo() { scope instance = new MyClass();}
所以我認爲,這兩個語句是相等的(在分配方面)?
不,auto
只能推斷出類型。
如果您希望將其分配到堆棧中,則使用auto
毫無意義;這是scope
是(是)。
他們已經出色地(讀:不那麼多)決定從語言中刪除scope
,delete
等,所以它可能會在堆上分配。最好的辦法是在其中一個模塊中使用名爲scoped
的函數來分配堆棧。
要回答第二個問題:在D1中,這兩個陳述是不相等的。第一個分配在堆上,第二個分配(應該)分配到堆棧上。
那些移除隻影響D2。無論如何,D1仍然會有'範圍'和'刪除'。 (在D2'範圍'將被庫函數替換,'delete'將被替換爲'clear()'。) – kennytm
@KennyTM:好點 - 我沒有注意到標題中的D1,因爲它沒有被標記爲' t在標籤中。 – Mehrdad