开辟与释放内存
用new和malloc为对象动态分配内存时,都会自动调用对象的构造函数。这句话对吗?
------解决方案--------------------不对,malloc不调用构造函数,malloc是C语言用的,C语言中就没构造函数的概念
------解决方案--------------------malloc是兼容C语言而保留下来的,C语言中没有构造函数这个概念,所以这道题不对。
int *p = new int();
如果在类型后面加个圆括号,就会调用相应的构造函数来初始化,初始化为0.
string *p = new string;
这是类类型,不用圆括号也会自动调用构造函数来初始化,初始化为空串。
对也内置类型,需要加圆括号,对于类类型,如果有构造函数,就会调用构造函数。
以上仅是我的理解
~~
------解决方案--------------------
------解决方案--------------------不对。。。。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 分配内存,同时调用构造函数
------解决方案--------------------