- C++中的类可以定义多个对象,那么对象构造的顺序是怎样的?
对于局部对象
- 当程序执行流到达对象的定义语句时进行构造
对于堆对象
- 当程序执行流到达new语句时创建对象
- 使用new创建对象将自动触发构造函数的调用
对于全局对象
- 对象的构造顺序是不确定的
- 不同的编译器使用不通的规则确定构造顺序
头文件
#ifndef _TEST_H_
#define _TEST_H_
#include<stdio.h>
class Test
{
public:
Test(const char *s)
{
printf("%s\n",s);
}
};
#endif
t1.cpp
#include"test.h"
Test t1("t1");
t2.cpp
#include "test.h"
Test t2("t2");
t3.cpp
#include "test.h"
Test t3("t3");
main.cpp
#include"test.h"
Test t4("t4");
int main()
{
Test t5("t5");
}
- 编译
g++ t21-3.cpp t2.cpp t1.cpp t3.cpp -o test
编译输出: t4 t2 t1 t3 t5
小结
- 局部对象的构造顺序依赖于程序的执行流
- 局部对象的构造顺序依赖于程序的执行流
- 全局对象的构造顺序是不确定的