Memory management D1和x27;内存分配中的自动和作用域差异

Memory management D1和x27;内存分配中的自动和作用域差异,memory-management,d,Memory Management,D,D的文档说,当您对局部变量使用scope时,它们将在堆栈上分配(即使您正在分配class实例)。但是auto关键字呢?它是否保证将在堆栈上分配实例 void foo(){auto instance=new MyClass();} void foo(){scope instance=new MyClass();} 因此,我可以建议这两个语句(在分配方面)相等吗?否,auto仅推断类型。 如果希望在堆栈上分配它,那么使用auto是没有意义的;这就是scope的作用 他们出色地(阅读:没有那么多)决定

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

  • void foo(){auto instance=new MyClass();}
  • void foo(){scope instance=new MyClass();}

  • 因此,我可以建议这两个语句(在分配方面)相等吗?

    否,
    auto
    仅推断类型。
    如果希望在堆栈上分配它,那么使用
    auto
    是没有意义的;这就是
    scope
    的作用


    他们出色地(阅读:没有那么多)决定从语言中删除
    范围
    删除
    ,等等,因此它可能会在堆上进行分配。您最好在其中一个模块中使用名为
    scoped
    的函数在堆栈上进行分配。

    否,
    auto
    仅推断类型。
    如果希望在堆栈上分配它,那么使用
    auto
    是没有意义的;这就是
    scope
    的作用


    他们出色地(阅读:没有那么多)决定从语言中删除
    范围
    删除
    ,等等,因此它可能会在堆上进行分配。最好在其中一个模块中使用名为
    scoped
    的函数在堆栈上进行分配。

    回答第二个问题:在D1中,这两个语句不相等。第一个在堆上分配,第二个在堆栈上分配。

    回答第二个问题:在D1中,这两个语句不相等。第一个在堆上分配,第二个(假定)在堆栈上分配。

    这些删除只影响D2。D1仍然具有
    范围
    删除
    ,无论发生什么情况。(在D2中,
    scope
    将被库功能替换,
    delete
    将被
    clear()
    替换)@KennyTM:好的一点——我没有注意到标题中的D1,因为它不在标记中。这些删除只影响D2。D1仍然具有
    范围
    删除
    ,无论发生什么情况。(在D2中,
    scope
    将被库功能替换,
    delete
    将被
    clear()
    替换)@KennyTM:好的观点——我没有注意到标题中的D1,因为它不在标签中。