代码之家  ›  专栏  ›  技术社区  ›  porton

在堆栈上分配D类

  •  1
  • porton  · 技术社区  · 7 年前

    https://dlang.org/spec/expression.html 表示“如果使用NewExpression作为作用域存储类的函数局部变量的初始值设定项,并且到new的ArgumentList为空,则实例在堆栈上而不是在堆上分配,或者使用特定于类的分配器分配。”

    这是否意味着在下面的程序中 C 是否完全在堆栈上分配,而不进行任何堆分配?

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

    另外:为什么它只适用于空参数列表?

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

    1 回复  |  直到 7 年前
        1
  •  3
  •   dhasenan    7 年前

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

    具体情况如下:

    • 通过调用来初始化变量 new SomeClass
    • scope )
    • 初始化不涉及自定义分配器(已弃用);那看起来像 new(args) SomeClass