在 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 也写了一些关于此的内容。
繁花不似锦
TA贡献1851条经验 获得超4个赞
查看结果的类型是有益的。
make(T, ...)
返回类型T
。make
只能用于少数内置类型(切片、贴图、通道)。它基本上是这些类型的“构造函数”。new(T)
返回类型*T
。它适用于所有类型,并为所有类型做同样的事情——它返回一个指向T
具有零值的新类型实例的指针。
- 3 回答
- 0 关注
- 172 浏览
添加回答
举报
0/150
提交
取消