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