13、不一样的C++系列--对象构造顺序
2017-06-11 10:26
323 查看
单个对象的构造与析构
单个对象创建时构造函数的调用顺序1、调用父类的构造过程
2、调用成员变量的构造函数(调用顺序与声明顺序相同)
3、调用类自身的构造函数
析构函数与对应构造函数的调用顺序相反
多个对象析构时
析构顺序与构造顺序相反
对于栈对象和全局对象,类似于入栈与出栈的顺序,最后构造的对象被最先析构
堆对象的析构发生在使用delete的时候,与delete的使用顺序相关
局部对象
对于局部对象当程序执行流到达对象的定义语句时进行构造
举个栗子:
int i = 0; Test a1 = i; while( i < 3 ) { Test a2 = ++i; } if( i < 4 ) { Test a = a1; } else { Test a(100); }
在这段代码里Test类构造顺序是按照程序的执行流依次往下进行。
堆对象
对于堆对象当程序执行流到达new语句时创建对象
使用new创建对象将自动触发构造函数的调用
再次举栗子:
int i = 0; Test* a1 = new Test(i); // Test(int i): 0 while( ++i < 10 ) if( i % 2 ) new Test(i); // Test(int i): 1, 3, 5, 7, 9 if( i < 4 ) new Test(*a1); else new Test(100); // Test(int i): 100
在这段代码中只有执行new时在堆空间分配空间后才执行构造方法。
全局对象
对于全局对象对象的构造顺序是不确定的
不同的编译器使用不同的规则确定构造顺序
最后举一次栗子:
#include "test.h" Test t4("t4"); int main() { Test t5("t5"); }
这里的Test是全局对象,那它的构造顺序就不确定,依编译器而定。
相关文章推荐
- 11、不一样的C++系列--对象的构造
- c++子类对象构造与析构的顺序对多态性的影响
- [C++]多个对象构造、析构、构造和析构的顺序
- C++的对象构造顺序
- C++ 构造,析构顺序(静态对象)
- C++对象的构造顺序
- C++——对象构造顺序
- 16、不一样的C++系列--const对象与类成员的知识点
- C/C++开发语言系列之13---C++对象指针—指向对象的指针
- 18、不一样的C++系列--二阶构造模式
- 29、不一样的C++系列--对象模型分析
- 27、不一样的C++系列--继承的构造与析构
- 14、不一样的C++系列--对象销毁
- C和C++的面向对象专题(7)——单例模式解决静态成员对象和全局对象的构造顺序难题
- c++对象成员变量的构造和析构顺序
- 《 C++深度剖析》学习日志十六——对象的构造顺序
- c++是如何处理 对象 作为返回值 和 输入参数的 -- 拷贝构造
- 派生类对象构造与析构的顺序
- [C++再学习系列] 函数声明与STL容器构造
- C++面向对象复习(三)——构造函数与析构函数的调用顺序