https://dlang.org/spec/expression.html说:“如果将NewExpression用作具有作用域存储类的函数局部变量的初始化程序,并且new的ArgumentList为空,则将实例分配在堆栈上,而不是堆上或使用类特定的分配器。”
这是否意味着在以下程序中C
的对象完全分配在堆栈上,而没有任何堆分配?
class C {
int x;
}
void main() {
scope c = new C();
}
还:为什么它仅适用于空参数列表?
我怀疑我理解正确,因为我阅读的所有其余D资料都说类是在堆上分配的。我想确定。
答案 0 :(得分:3)
通常,在D中,类是在堆上分配的。在这种特定情况下,可以在堆栈上分配类。
具体情况是:
new SomeClass
scope
)new(args) SomeClass
。