在堆栈上分配D类

时间:2018-12-27 18:45:50

标签: class stack d heap-memory

https://dlang.org/spec/expression.html说:“如果将NewExpression用作具有作用域存储类的函数局部变量的初始化程序,并且new的ArgumentList为空,则将实例分配在堆栈上,而不是堆上或使用类特定的分配器。”

这是否意味着在以下程序中C的对象完全分配在堆栈上,而没有任何堆分配?

class C {
  int x;
}

void main() {
  scope c = new C();
}

还:为什么它仅适用于空参数列表?

我怀疑我理解正确,因为我阅读的所有其余D资料都说类是在堆上分配的。我想确定。

1 个答案:

答案 0 :(得分:3)

通常,在D中,类是在堆上分配的。在这种特定情况下,可以在堆栈上分配类。

具体情况是:

  • 通过调用new SomeClass
  • 初始化变量
  • 没有对该值的引用会逸出当前函数(scope
  • 初始化不涉及自定义分配器(已弃用);看起来像new(args) SomeClass