make 和 new 有什么区别?

winnie123321 · · 1805 次点击
new 和 make 均是用于分配内存:new 用于值类型和用户定义的类型,如自定义结构,make 用于内置引用类型(切片、map 和通道)。它们的用法就像是函数,但是将类型作为参数:new(type)、make(type)。new(T) 分配类型 T 的零值并返回其地址,也就是指向类型 T 的指针。它也可以被用于基本类型:v := new(int)。make(T) 返回类型 T 的初始化之后的值,因此它比 new 进行更多的工作。 new() 是一个函数,不要忘记它的括号。二者都是内存的分配(堆上),但是make只用于slice、map以及channel的初始化(非零值);而new用于类型的内存分配,并且内存置为零。 晨读里有
#3
更多评论
make是分配一段足够的空间给slice/map/array new是创建一个新的指向特定类型的指针。 所以没啥联系……
#1
不同语言之前的创建新的内存空间吧,结果是一样的
#2