好的,问题来了……new 关键字是否过时了?
考虑在 C#(我相信还有 java)中有严格的类型规则。类是引用类型,只能在堆上创建。 POD 类型是在栈上创建的;如果你想在堆上分配它们,你必须将它们装箱在一个对象类型中。在 C# 中,structs
是异常(exception),它们可以在堆栈或堆上创建。
鉴于这些规则,我们仍然必须使用 new 关键字是否有意义?语言根据类型使用适当的分配策略不是很有意义吗?
例如,我们目前要写:
SomeClassType x = new SomeClassType();
代替
SomeClassType x = SomeClassType();
甚至只是
SomeClassType x;
编译器会基于正在创建的类型是引用类型,继续在堆上为 x 分配内存。
这适用于其他语言,如 ruby、php 等。 C/C++ 允许程序员更好地控制对象的创建位置,因此有充分的理由要求使用 new 关键字。
new
是否只是 60 年代和我们基于 C 的传统的遗留物?
最佳答案
SomeClassType x = SomeClassType();
在这种情况下,SomeClassType()
可能是一个位于其他地方的方法,编译器如何知道是调用这个方法还是创建一个新类。
SomeClassType x;
这不是很有用,大多数人都这样声明他们的变量,有时在需要时稍后填充它们。因此,每次声明变量时都在内存中创建一个实例是没有用的。
关于c# - 新对象过时了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2029351/