c++ new 与 malloc 区别

这里需要说明的是,new运算符和malloc函数,并不只是有语法层面的不同——两者的功能是完全不一样的。malloc只是分配一块指定大小的堆内存,而new则不同——它同时包括两个步骤:

  • 调用malloc分配一片堆内存
  • 建立变量或者对象——如果要建立的是一个对象的话,那么这一步new运算符会调用类的构造函数来完成

除此之外,还有一点是 重载的new运算符——“就地构造” placement new。它的作用是在指定的内存地址上构造对象。语法形式如下所示:

new(address) Object();

举个例子,如果我们有一个类Class,那么当我们执行以下代码的时候:

Class *p=new Class();

我们相当于在执行:

Class *p=(Class*)malloc(sizeof(Class));
new(p) Class();

如果一些堆上的对象需要反复构造和销毁的话,那么你可以使用malloc函数配合 placement new ,这样可以节省分配内存的开销。

以上来自计蒜客:)

全部评论

相关推荐

当初高考报计算机真是造大孽了啊!卷的飞起!哪都是计算机的人,考研,考公,找工作全他奶的计算机的人,太难了。国企也是。关键一届比一届卷,造大孽了!
_Lyrics_:因为计算机,没有体验到快乐的大学研究生时光,好不容易修完课程就要出去实习,看着别人专业可以一起搓麻将,游山玩水,而我却要自己一个人住在北上不到十平米的出租屋,每天两点一线
点赞 评论 收藏
分享
05-30 18:54
武汉商学院 Java
湫湫湫不会java:先投着吧,大概率找不到实习,没实习的时候再加个项目,然后把个人评价和荣誉奖项删了,赶紧成为八股战神吧,没实习没学历,秋招机会估计不多,把握机会。或者说秋招时间去冲实习,春招冲offer,但是压力会比较大
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务