我对语言及其基础非常感兴趣,我想向社区提出这个问题。在这些语言中,以下内容与其他语言类似吗?
C#
Foo bar = default(Foo); //alloc
bar = new Foo(); //initVB.NET
Dim bar As Foo = Nothing 'alloc
bar = New Foo() 'initObjective-C
Foo* bar = [Foo alloc]; //alloc
bar = [bar init]; //init发布于 2010-05-19 12:55:28
Foo类型既可以是值类型,也可以是引用类型,当然Objective-C除外。
假设Foo是引用类型,那么对于C#和VB.NET,第一行不会为对象分配任何内存,因为Objective-C第一行将实际分配内存,所以这是不同的。.NET语言在第二行的一行中执行分配和初始化。
在Foo是值类型的情况下,那么.NET语言彼此类似,Objective-C没有值类型(至少我上一次使用它是在15年前)。
发布于 2010-05-19 13:01:02
您在C#和VB.NET中都覆盖了bar。您的代码等同于:
Foo bar; // does nothing but declare a handle
bar = new Foo(); // alloc AND init或者简单地说:
Foo bar=new Foo();在Obj-C显然将分配与初始化分开的地方,所有其他类似C++的语言都将这两者结合在一起,认为(正确的是,我相信)你永远不想拥有部分未初始化的对象(当然,除了构造函数)。
https://stackoverflow.com/questions/2862840
复制相似问题