读书人

开拓与释放内存

发布时间: 2012-09-28 00:03:35 作者: rapoo

开辟与释放内存
用new和malloc为对象动态分配内存时,都会自动调用对象的构造函数。这句话对吗?

[解决办法]
不对,malloc不调用构造函数,malloc是C语言用的,C语言中就没构造函数的概念
[解决办法]
malloc是兼容C语言而保留下来的,C语言中没有构造函数这个概念,所以这道题不对。
int *p = new int();
如果在类型后面加个圆括号,就会调用相应的构造函数来初始化,初始化为0.
string *p = new string;
这是类类型,不用圆括号也会自动调用构造函数来初始化,初始化为空串。

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

以上仅是我的理解
~~
[解决办法]

探讨
用new和malloc为对象动态分配内存时,都会自动调用对象的构造函数。这句话对吗?

[解决办法]
不对。。。。malloc不会执行构造函数。。。可以看下这篇文章。。我转载的http://www.cnblogs.com/wonderKK/archive/2012/03/18/2405196.html
[解决办法]
malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。

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

因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete

[解决办法]
malloc只分配内存,不调用构造函数
placement new只调用构造函数,不分配内存
new 分配内存,同时调用构造函数
[解决办法]
探讨

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

读书人网 >C++

热点推荐