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