D1的内存分配的自动和范围差异

时间:2011-11-20 09:11:02

标签: memory-management d

D的文档说当你使用scope作为局部变量时,它们将被分配在堆栈上(即使你正在分配class实例)。但是auto关键字呢?它是否保证实例将在堆栈上分配?

  1. void foo() { auto instance = new MyClass();}
  2. void foo() { scope instance = new MyClass();}
  3. 那么我可以建议这两个陈述是相等的(就分配而言)吗?

2 个答案:

答案 0 :(得分:1)

不,auto仅推断出类型 如果你想在堆栈上分配它,那么使用auto是没有意义的。那就是scope是什么。

他们非常出色(阅读:不是那么多)决定从语言中删除scopedelete等,所以无论如何它都可能在堆上分配。最好的办法是在其中一个模块中使用名为scoped的函数,在堆栈上进行分配。

答案 1 :(得分:0)

回答第二个问题:在D1中,这两个陈述并不相同。第一个在堆上分配,第二个(假设)在堆栈上分配。