参考: http://www.weixueyuan.net/view/6347.html

总结:

  

当我们需要为类对象动态分配存储空间时,我们应该使用C++语言提供的new与new[]操作符,而不要使用C语言提供的malloc函数

虽然malloc函数具有分配存储空间的功能,但是这些函数除了分配存储空间外,不会调用类的构造函数。而C++语言提供的new和new[]操作符则不会如此,使用它们为对象分配存储空间的同时,它们也会调用相应的构造函数。

操作符delete和delete[]在释放对象存储空间的同时也会调用析构函数,而free函数则不会调用析构函数。

例1:

#include<iostream>
using namespace std; class test
{
public:
test(int i = ){num = i;cout<<num<<" Constructor"<<endl;}
~test(){cout<<num<<" Destructor"<<endl;}
private:
int num;
}; int main()
{
test * t0 = new test();
test * t1 = new test[];
test * t2 = (test *)malloc(sizeof(test));
delete t0;
delete[] t1;
free(t2);
return ;
}

程序运行结果:

0 Constructor
1 Constructor
1 Constructor
1 Constructor
1 Constructor
1 Constructor
0 Destructor
1 Destructor
1 Destructor
1 Destructor
1 Destructor
1 Destructor

从程序运行结果不难看出malloc确实没有调用构造函数,free也没有调用析构函数。在这里可能有人会觉得这没有遵循析构函数调用顺序,其实不是这样的,因为我们在delete t0;的语句的时候就已经要求编译器销毁t0对象了,此时其它对象还处于存活期,因此t0先走一步,调用析构函数。之后再销毁t1所指向的对象数组。

最新文章

  1. linuxmint 17安装qt5.3.1
  2. C++以对象管理资源
  3. iOS开发UI篇—字典转模型
  4. Python学习教程(learning Python)--3 Python分支结构和布尔逻辑
  5. [Express] Level 4: Body-parser -- Delete
  6. CSS3: box-sizing 属性的简单认识
  7. AutoCAD 2013官方简体中文破解版(32 / 64位),带激活码和注册机
  8. typedef和block
  9. pythion 第二弹
  10. Uva 679 Dropping Ballls 二叉树的编号
  11. Linux-hexdump命令调试event驱动—详解(13)
  12. 让你的代码量减少3倍!使用kotlin开发Android(三) 缩短五倍的Java Bean
  13. 自动化测试框架【windows版】:JMeter + Ant + Jenkins
  14. python excel 读写
  15. pandas:解决groupby().apply()方法打印两次
  16. Docker深入浅出1
  17. js &amp;&amp; Jquery 的回车事件
  18. .Net Core全球化多语言
  19. Asset Catalogs
  20. 从c到cpp对static 关键字的总结 需要整理下!!!!!!!!!!!!!!!!!!!!!!

热门文章

  1. HTML第十四章总结 HTML forms
  2. Getting started with Processing 第九章总结
  3. 宿主iis部署wcf
  4. 20170906xlVBA_RecursionGetFiles
  5. 在Java、Web和移动开发方面最值得关注的12大开源框架
  6. Centos 6.5 搭建阿里云yum源
  7. HTML(form标签)、CSS选择器一
  8. python-项目流程分析及优化查询方法
  9. 解决PLSQL Developer 插入中文 乱码问题(转)
  10. Github SSH key 的配置