在堆栈上分配一个 D class
Allocation of a D class on the stack
https://dlang.org/spec/expression.html 说 "If a NewExpression is used as an initializer for a function local variable with scope storage class, and the ArgumentList to new is empty, then the instance is allocated on the stack rather than the heap or using the class specific allocator."
是否意味着在下面的程序中C
的对象完全分配在堆栈上,没有任何堆分配?
class C {
int x;
}
void main() {
scope c = new C();
}
另外:为什么它只对空参数列表有效?
我怀疑我理解错了,因为我看的其余D资料都说类分配在堆上。我想确定一下。
在D中,一般来说,类都分配在堆上。在这种特定情况下,可以在堆栈上分配 类。
具体案例为:
- 通过调用
new SomeClass
初始化变量
- 没有对该值的引用转义当前函数 (
scope
)
- 初始化不涉及自定义分配器(已弃用);看起来像
new(args) SomeClass
.
https://dlang.org/spec/expression.html 说 "If a NewExpression is used as an initializer for a function local variable with scope storage class, and the ArgumentList to new is empty, then the instance is allocated on the stack rather than the heap or using the class specific allocator."
是否意味着在下面的程序中C
的对象完全分配在堆栈上,没有任何堆分配?
class C {
int x;
}
void main() {
scope c = new C();
}
另外:为什么它只对空参数列表有效?
我怀疑我理解错了,因为我看的其余D资料都说类分配在堆上。我想确定一下。
在D中,一般来说,类都分配在堆上。在这种特定情况下,可以在堆栈上分配 类。
具体案例为:
- 通过调用
new SomeClass
初始化变量
- 没有对该值的引用转义当前函数 (
scope
) - 初始化不涉及自定义分配器(已弃用);看起来像
new(args) SomeClass
.