博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++--对象的构造顺序与对象的销毁
阅读量:7144 次
发布时间:2019-06-29

本文共 1286 字,大约阅读时间需要 4 分钟。

一.对象的构造顺序

A.对于局部对象 --当程序执行流到达对象的定义语句时进行构造

程序示例

#include
using namespace std;class Test{ private: int mi; public: Test(int i) { mi=i; cout<<"Test(int i)="<
<

运行结果如图所示

C++--对象的构造顺序与对象的销毁
由运行结果可以看出,程序是按照程序流来实现的Test a=i首先被构造,输出Test(int i)=0,Test a1=++i输出Test(int i)=1,Test(int i)=2,Test(int i)=3;Test a2=a输出Test(const Test& obj)=0;
B.对于堆对象
1.当程序执行流到达new语句时创建对象
2.使用new创建对象将自动触发构造函数的调用
代码示例

#include
using namespace std;class Test{ private: int mi; public: Test(int i) { mi=i; cout<<"Test(int i)="<
<

运行结果如图所示

C++--对象的构造顺序与对象的销毁
C.对于全局对象
1.对象的构造顺序是不确定的
2.不同的编码器使用不同的规则确定构造顺序

二.对象的销毁

1.一般而言,需要要销毁的对象都应该做清理

2.解决方案
a.为每个类提供一个public的free函数
b.对象不在需要时立即调用free函数进行清理
C++--对象的构造顺序与对象的销毁
存在的问题
1.free函数只是一个普通的函数,必须显示的调用
2.对象销毁前没有做清理,很可能造成资源泄漏

析构函数

C++的类中可以定义一个特殊的清理函数
1.这个特殊的清理函数叫做析构函数
2.析构函数的功能与构造函数相反
定义:~ClassName()
1.析构函数没有参数也没有返回值类型声明
2.析构函数在对象销毁时自动被调用
代码示例

#include 
using namespace std;class Test{ int mi;public: Test(int i) { mi = i; cout<<"Test()"<

运行结果

C++--对象的构造顺序与对象的销毁
运行结果如图所示,使用~ClassName之后对构造函数进行了析构,并销毁

小结

1.局部对象的构造顺序依赖于程序的执行流
2.堆对象的构造顺序依赖于new的使用顺序
3.全局对象的构造顺序是不确定的
4.析构函数时对象销毁时进行清理的特殊函数
5.析构函数在对象销毁时自动被调用
6.析构函数是对象释放系统资源的保障

转载于:https://blog.51cto.com/13475106/2397937

你可能感兴趣的文章
自动化运维之CentOS7下PXE+Kickstart+DHCP+TFTP+HTTP无人值守安装系统
查看>>
O2O混战 谁能笑到最后
查看>>
再遇asm问题
查看>>
GIT常用命令总结
查看>>
Android平台Firefox——Fennec编译手记
查看>>
Linux基础之文件权限详解
查看>>
负载均衡之LVS--Shell脚本配置LVS
查看>>
利用虚拟化实现应用发布与网络隔离
查看>>
selenium+firefox调试成功
查看>>
Windows Phone 实用开发技巧(2):使用TombstoneHelper简化墓碑操作
查看>>
Spring从菜鸟到高手(二)AOP的真正实现
查看>>
LogStash日志分析展示系统
查看>>
VC6.0 error LNK2001: unresolved external symbol _main
查看>>
如何使用Lync 与外部的客户开会
查看>>
Firefox添加Nagios插件
查看>>
关于数据的归档存入文件和读取文件
查看>>
php编译错误自我总结
查看>>
更改outlook界面色彩方案
查看>>
JBoss企业级应用服务平台群集指南(七)第一部分
查看>>
hpux boot guide
查看>>