2011-11-20 158 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中,这两个陈述是不相等的。第一个分配在堆上,第二个分配(应该)分配到堆栈上。