我对语言及其基础非常感兴趣,我想向社区提出这个问题。以下是这些语言中的以下类似物吗?
C#
Foo bar = default(Foo); //alloc
bar = new Foo(); //init
VB.NET
Dim bar As Foo = Nothing 'alloc
bar = New Foo() 'init
目标-C
Foo* bar = [Foo alloc]; //alloc
bar = [bar init]; //init
答案 0 :(得分:2)
Foo类型可以是值类型或参考类型,当然,除了Objective-C之外。
假设Foo是一个引用类型,那么对于C#和VB.NET,第一行不会为对象分配任何内存,因为Objective-C第一行实际上会分配内存,所以这是一个区别。 .NET语言在第二行中的一行中执行分配和初始化。
在Foo是值类型的情况下,.NET语言彼此不一致,Objective-C没有值类型(至少不是我15年前最后一次使用它)。
答案 1 :(得分:0)
你在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 ++的语言结合了2,思考(正确imo)你永远不想拥有部分未初始化的对象(当然,除了构造函数)。