new & make什么情况下使用 及其内存分配原理

请尝试在评论区里写下答案(如不能清楚表述,那么你可能没真正理解)。欢迎参与,为下一次求职做准备。
  • new返回的是一个指针,即指向一个被初始化为0值得地址。常用来声明:array、struct和所有的值类型
  • make用来分配内存,直接返回类型值,且值也不是被初始化为0,而是可以被指定初始化。使用情况:make仅用于slice,map,channel的内存分配。
go
滴水穿石,石破天惊----晓疯子
zhaocrazy
讨论数量: 2

复制一段我自己的笔记。

  • new 函数只接受一个参数,这个参数是一个类型,并且返回一个指向该类型内存地址的指针。同时 new 函数会把分配的内存置为零,也就是类型的零值。
  • make 也是用于内存分配的,但是和 new 不同,它只用于 chan、map 以及 slice 的内存创建,而且它返回的类型就是这三个类型本身,而不是他们的指针类型,因为这三种类型就是引用类型,所以就没有必要返回他们的指针了。
  • var 声明(包括结构体),系统会默认为他分配内存空间,并赋该类型的零值。
  • 如果使用var声明一个指针类型的变量,系统不会为他分配内存,默认就是nil。此时如果你想直接使用,那么系统会抛异常。需要只用new分配内存
2年前 评论

复制一段我自己的笔记。

  • new 函数只接受一个参数,这个参数是一个类型,并且返回一个指向该类型内存地址的指针。同时 new 函数会把分配的内存置为零,也就是类型的零值。
  • make 也是用于内存分配的,但是和 new 不同,它只用于 chan、map 以及 slice 的内存创建,而且它返回的类型就是这三个类型本身,而不是他们的指针类型,因为这三种类型就是引用类型,所以就没有必要返回他们的指针了。
  • var 声明(包括结构体),系统会默认为他分配内存空间,并赋该类型的零值。
  • 如果使用var声明一个指针类型的变量,系统不会为他分配内存,默认就是nil。此时如果你想直接使用,那么系统会抛异常。需要只用new分配内存
2年前 评论

用new还是make?到底该如何选择?

  • make 仅用来分配及初始化类型为 slice、map、chan 的数据。
  • new 可分配任意类型的数据,根据传入的类型申请一块内存,返回指向这块内存的指针,即类型 *Type。
  • make 返回引用,即 Type,new 分配的空间被清零, make 分配空间后,会进行初始。
1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!