开辟与释放内存

liushui9 2012-06-23 11:36:10
用new和malloc为对象动态分配内存时,都会自动调用对象的构造函数。这句话对吗?
...全文
172 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 版主 2012-06-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

不对,malloc不调用构造函数,malloc是C语言用的,C语言中就没构造函数的概念
[/Quote]


++

C语言是面向过程,而不是面向对角的编程,完全没有构造函数的概念。
而new则会。
sl51314240 2012-06-25
  • 打赏
  • 举报
回复
malloc只分配内存,不调用构造函数
placement new只调用构造函数,不分配内存
new 分配内存,同时调用构造函数
fzamygsd 2012-06-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
不对,malloc不调用构造函数,malloc是C语言用的,C语言中就没构造函数的概念
[/Quote]
freeicy2007 2012-06-23
  • 打赏
  • 举报
回复
什么情况!
qq120848369 2012-06-23
  • 打赏
  • 举报
回复
汗.!
freeicy2007 2012-06-23
  • 打赏
  • 举报
回复
不对,malloc不调用构造函数,malloc是C语言用的,C语言中就没构造函数的概念
kevinyank 2012-06-23
  • 打赏
  • 举报
回复
malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。

  对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。

因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete
kevinyank 2012-06-23
  • 打赏
  • 举报
回复
不对。。。。malloc不会执行构造函数。。。可以看下这篇文章。。我转载的http://www.cnblogs.com/wonderKK/archive/2012/03/18/2405196.html
pathuang68 2012-06-23
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
用new和malloc为对象动态分配内存时,都会自动调用对象的构造函数。这句话对吗?
[/Quote]

不对。

new的时候回自动调用构造函数,malloc则不会。
大愚若智_ 2012-06-23
  • 打赏
  • 举报
回复
malloc出生的时候 析构函数还在娘胎里呢,,调用不到的
支持楼上的说话
  • 打赏
  • 举报
回复
malloc是兼容C语言而保留下来的,C语言中没有构造函数这个概念,所以这道题不对。
int *p = new int();
如果在类型后面加个圆括号,就会调用相应的构造函数来初始化,初始化为0.
string *p = new string;
这是类类型,不用圆括号也会自动调用构造函数来初始化,初始化为空串。

对也内置类型,需要加圆括号,对于类类型,如果有构造函数,就会调用构造函数。

以上仅是我的理解
~~
wshn13 2012-06-23
  • 打赏
  • 举报
回复
显然不对啊
laizhiping_rj 2012-06-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
不对,malloc不调用构造函数,malloc是C语言用的,C语言中就没构造函数的概念
[/Quote]
+1

64,676

社区成员

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

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