猿问

make 和 new 实际上是做什么的?

在 Go 中,如果我想创建一个 T 的对象,我可以尝试以下方法:

t := T{} // t 是当前栈中创建的实际对象
p := &T{} // p 是指向当前栈中创建的实际对象
p := make(T) 的指针 // p 是指向堆中创建的实际对象的指针
p := new(T) // p是指向在堆中创建的实际对象的指针

我想知道我的评论是否正确?


互换的青春
浏览 175回答 3
3回答

喵喵时光机

t := T{} // t is the actual object created in the current stackp := &T{} // p is a pointer points to the actual object which is created in the current stackp := make(T) // p is a pointer points to the actual object which is created in the heapp := new(T) // p is a pointer points to the actual object which is created in the heap我想知道我的评论是否正确?不完全是,对象是分配在堆栈上还是堆上取决于转义分析,而不是用于实例化对象的特定符号,实际上Dave 也写了一些关于此的内容。

繁花不似锦

查看结果的类型是有益的。make(T, ...)返回类型T。make只能用于少数内置类型(切片、贴图、通道)。它基本上是这些类型的“构造函数”。new(T)返回类型*T。它适用于所有类型,并为所有类型做同样的事情——它返回一个指向T具有零值的新类型实例的指针。
随时随地看视频慕课网APP

相关分类

Go
我要回答