本文内容取自于对狄泰学院 唐佐林老师 C++深度解析 课程的学习总结
问题
C++中的类可以定义多个对象,
那么对象构造的顺序是怎样的?
对象的构造顺序一
对于局部对象
- 当程序执行流到达对象的定义语句时进行构造
对象的构造顺序二
对于堆对象
- 当程序执行流到达new语句时创建对象
- 使用new创建对象将自动触发构造函数的调用
对象的构造顺序三
对于全局对象
- 对象的构造顺序是不确定的
- 不同的编译器使用不同的规则确定构造顺序
实例分析
全局对象的构造顺序
test.h 定义Test类
#ifndef _TEST_H_
#define _TEST_H_
#include <stdio.h>
class Test
{
public:
Test(const char* s)
{
printf("%s\n", s);
}
};
#endif
t1.cpp 定义全局类t1
#include "test.h"
Test t1("t1");
t2.cpp 定义全局类t2
#include "test.h"
Test t2("t2");
t3.cpp 定义全局类t3
#include "test.h"
Test t3("t3");
main.cpp
#include "test.h"
Test t4("t4");
int main()
{
Test t5("t5");
}
小结
- 局部对象的构造顺序依赖于程序的执行流
- 堆对象的构造顺序依赖于new的使用顺序
- 全局对象的构造顺序是不确定的