(惯用语?)new(T) 和 &T{...} 之间的区别?
(Idiomatic?) Difference between new(T) and &T{...}?
我开始玩 Go,对 new
函数有点恼火。它似乎非常有限,尤其是在考虑具有匿名字段或内联初始化的结构时。所以我通读了规范 stumbled over the following paragraph:
Calling the built-in function new or taking the address of a composite literal allocates storage for a variable at run time.
所以我怀疑 new(T)
和 &T{}
的行为方式完全相同,对吗?如果这是正确的,在什么情况下应该使用 new
?
是的,你是对的。 new
对结构没那么有用。但它与其他基本类型有关。 new(int)
会给你一个指向零值 int
的指针,你不能做 &int{}
或类似的事情。
无论如何,根据我的经验,您很少需要它,因此很少使用 new
。您可以只声明一个普通的 int
并传递一个指向它的指针。事实上,这样做可能更好,因为编译器会为您决定在堆栈中分配还是在堆中分配。
我开始玩 Go,对 new
函数有点恼火。它似乎非常有限,尤其是在考虑具有匿名字段或内联初始化的结构时。所以我通读了规范 stumbled over the following paragraph:
Calling the built-in function new or taking the address of a composite literal allocates storage for a variable at run time.
所以我怀疑 new(T)
和 &T{}
的行为方式完全相同,对吗?如果这是正确的,在什么情况下应该使用 new
?
是的,你是对的。 new
对结构没那么有用。但它与其他基本类型有关。 new(int)
会给你一个指向零值 int
的指针,你不能做 &int{}
或类似的事情。
无论如何,根据我的经验,您很少需要它,因此很少使用 new
。您可以只声明一个普通的 int
并传递一个指向它的指针。事实上,这样做可能更好,因为编译器会为您决定在堆栈中分配还是在堆中分配。