2018-12-02

go new和make区别

new用来分配内存,但与其他语言中的同名函数不同,它不会初始化内存,只会讲内存置零;也就是说,new(T)会为类型为T的新项分配已置零的内存空间,并返回他的地址,也就是一个类型为T的值。用Go的术语来说,它返回一个指针,改指针指向新分配的,类型为T的零值;
make的目的不同于new,它只用于slice,map,channel的创建,并返回类型为T(非指针)的已初始化(非零值)的值;出现这种差异的原因在于,这三种类型本质上为引用类型,它们在使用前必须初始化;
小结:
new和make都在堆上分配内存,但是它们的行为不同,适用于不同的类型。
new(T) 为每个新的类型T分配一片内存,初始化为 0 并且返回类型为
T的内存地址:这种方法 返回一个指向类型为 T,值为 0 的地址的指针,它适用于值类型如数组和结构体;它相当于 &T{}。
make(T) 返回一个类型为 T 的初始值,它只适用于3种内建的引用类型:slice、map 和 channel。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,544评论 1 51
  • 转载自:https://halfrost.com/go_map_chapter_one/ https://half...
    HuJay阅读 6,210评论 1 5
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,157评论 1 32
  • 心血来潮去吃转转锅,因为很爱滋补汤里甜甜的味道,所以就点了这样的汤底。 我的目的其实是来喝汤的 但是,当正吃的浓时...
    陶一一阅读 472评论 0 0
  • 风吹着, 雪飘着, 落在我的发梢轻轻, 染白了我的青丝徐徐, 恰似你的温柔, 慢慢包围我的小城。 水流着, 叶飘着...
    瞉瞉阅读 225评论 0 0