- C++中的類可以定義多個(gè)對(duì)象,那么對(duì)象構(gòu)造的順序是怎樣的?
對(duì)于局部對(duì)象
- 當(dāng)程序執(zhí)行流到達(dá)對(duì)象的定義語句時(shí)進(jìn)行構(gòu)造
對(duì)于堆對(duì)象
- 當(dāng)程序執(zhí)行流到達(dá)new語句時(shí)創(chuàng)建對(duì)象
- 使用new創(chuàng)建對(duì)象將自動(dòng)觸發(fā)構(gòu)造函數(shù)的調(diào)用
對(duì)于全局對(duì)象
- 對(duì)象的構(gòu)造順序是不確定的
- 不同的編譯器使用不通的規(guī)則確定構(gòu)造順序
頭文件
#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
小結(jié)
- 局部對(duì)象的構(gòu)造順序依賴于程序的執(zhí)行流
- 局部對(duì)象的構(gòu)造順序依賴于程序的執(zhí)行流
- 全局對(duì)象的構(gòu)造順序是不確定的