关于new

liangchencf 2010-03-23 09:47:25
在C中我可以malloc(100*sizeof(struct xxx))来一次性的分配100个struct xxx的内存。到了C++中能否用new实现先分配内存,然后在需要的时候调用构造函数?主要是不想一个一个的new
...全文
135 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ShineShineRedStar 2010-03-23
  • 打赏
  • 举报
回复
顶5楼,那帖子说得挺好的。
sallan 2010-03-23
  • 打赏
  • 举报
回复
new的时候就已经开始调用构造函数了
we_sky2008 2010-03-23
  • 打赏
  • 举报
回复
直接用operator new;
和malloc一样,只负责申请内存,不负责初始化:
如:

A *p = (A*)operator new(sizeof (A) * 100);//此处只申请了可以容纳100个A类对象的空间
//使用时可以用placement new来在该空间上创建对象,如:
new (p+i)A();//在p+i处创建一个A类的缺省对象

//也可以像这样来创建对象
(p+i)->A::A();//直接调用构造函数在p+i处创建对象

//注意在delete p所指的空间时,要先逐个调用所创建对象的析构函数,再调用operator delete释放空间
(p+i)->~A();//先析构所创建的对象
operator delete p;//释放申请的空间


xiuxianshen 2010-03-23
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
楼主,你用new的时候,new本身就会调用类的构造函数,这就是new跟malloc的区别之一
像你上面所说的,你也可以一次性分配很多个,比如 obj *o = new obj[100],那么这100个对象都被构造函数进行了初始化,
不过你最后得用delete []o,来释放,而malloc 只是free就OK了
dubiousway 2010-03-23
  • 打赏
  • 举报
回复

new struct A[100]

或者 new A[100] // A 是定义好的结构
tiao618 2010-03-23
  • 打赏
  • 举报
回复
在中调用new是分配内存和构造构造函数的打包,由于初始化比较重要,所以new帮助完成,至于lz说的那样好像不行,lz可以继续查查
昵称很不好取 2010-03-23
  • 打赏
  • 举报
回复
new出一个数组即可
wade_2003 2010-03-23
  • 打赏
  • 举报
回复
解释的很清楚了,不过要记得释放 free

64,681

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧