为什么new operator会存在于C#和Java等现代语言中?它是纯粹的自我文档化代码特性,还是服务于任何实际目的?
例如下面的示例:
Class1 obj = new Class1();
Class1 foo()
{
return new Class1();
}
和Pythonesque式的编写方式一样容易阅读:
Class1 obj = Class1();
Class1 foo()
{
return Class1();
}
编辑:Cowan一针见血地澄清了这个问题:为什么他们选择这种语法?
发布于 2009-01-11 20:24:34
Class1 obj = Class1();
在C#和Java语言中,您需要"new“关键字,因为如果没有它,它会将"Class1()”视为对名称为"Class1“的方法的调用。
发布于 2009-01-11 20:41:39
C#中的新操作符直接映射到名为newobj
的IL指令,该指令实际为新对象的变量分配空间,然后执行构造函数(在IL中称为.ctor )。在执行构造函数时--与C++非常相似--对初始化对象的引用将作为不可见的第一个参数传入(如thiscall。
类似于thiscall的约定允许运行库为特定类加载和JIT内存中的所有代码一次,并将其重用于类的每个实例。
Java在它的中间语言中可能有一个类似的操作码,尽管我不太熟悉它。
发布于 2009-01-13 22:22:05
Java之所以选择它,是因为C++开发人员对它的语法很熟悉。C#之所以选择它,是因为它对Java开发人员来说很熟悉。
在C++中使用new
运算符的原因可能是,对于手动内存管理,明确何时分配内存非常重要。虽然pythonesque语法可以工作,但它使得内存分配不那么明显。
https://stackoverflow.com/questions/433591
复制相似问题