Memory management D1和x27;内存分配中的自动和作用域差异
D的文档说,当您对局部变量使用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的作用 他们出色地(阅读:没有那么多)决定
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,因为它不在标签中。