2011-11-20 157 views
1

D的文檔說當你使用局部變量的scope時,它們將被分配到棧上(即使你分配了class實例)。但關於auto關鍵字呢?它是否保證實例將被分配到棧上?D1的內存分配的自動和範圍差異

  1. void foo() { auto instance = new MyClass();}
  2. void foo() { scope instance = new MyClass();}

所以我認爲,這兩個語句是相等的(在分配方面)?

回答

1

不,auto只能推斷出類型。
如果您希望將其分配到堆棧中,則使用auto毫無意義;這是scope是(是)。

他們已經出色地(讀:不那麼多)決定從語言中刪除scopedelete等,所以它可能會在堆上分配。最好的辦法是在其中一個模塊中使用名爲scoped的函數來分配堆棧。

+3

那些移除隻影響D2。無論如何,D1仍然會有'範圍'和'刪除'。 (在D2'範圍'將被庫函數替換,'delete'將被替換爲'clear()'。) – kennytm

+0

@KennyTM:好點 - 我沒有注意到標題中的D1,因爲它沒有被標記爲' t在標籤中。 – Mehrdad

0

要回答第二個問題:在D1中,這兩個陳述是不相等的。第一個分配在堆上,第二個分配(應該)分配到堆棧上。