为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
互换的青春 2021-08-16 16:12:33
在 Go 中,如果我想创建一个 T 的对象,我可以尝试以下方法:t := T{} // t 是当前栈中创建的实际对象p := &T{} // p 是指向当前栈中创建的实际对象p := make(T) 的指针 // p 是指向堆中创建的实际对象的指针p := new(T) // p是指向在堆中创建的实际对象的指针我想知道我的评论是否正确?
查看完整描述

3 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

t := T{} // t is the actual object created in the current stack

p := &T{} // p is a pointer points to the actual object which is created in the current stack

p := make(T) // p is a pointer points to the actual object which is created in the heap

p := new(T) // p is a pointer points to the actual object which is created in the heap

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

不完全是,对象是分配在堆栈上还是堆上取决于转义分析,而不是用于实例化对象的特定符号,实际上Dave 也写了一些关于此的内容。


查看完整回答
反对 回复 2021-08-16
?
繁花不似锦

TA贡献1851条经验 获得超4个赞

查看结果的类型是有益的。

  • make(T, ...)返回类型Tmake只能用于少数内置类型(切片、贴图、通道)。它基本上是这些类型的“构造函数”。

  • new(T)返回类型*T。它适用于所有类型,并为所有类型做同样的事情——它返回一个指向T具有零值的新类型实例的指针。


查看完整回答
反对 回复 2021-08-16
  • 3 回答
  • 0 关注
  • 172 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信