C++構(gòu)造函數(shù)與析構(gòu)函數(shù)執(zhí)行順序 ???
構(gòu)造函數(shù)順序?yàn)椋?/p>
- ?全局對象的構(gòu)造函數(shù);
- ?main函數(shù)中對象的構(gòu)造函數(shù),包括automatic、static依次調(diào)用;
- ?main中遇到函數(shù)中有局部對象時(shí),進(jìn)入到函數(shù)中調(diào)用局部對象的構(gòu)造函數(shù)。
???? 注:static對象的構(gòu)造函數(shù)永遠(yuǎn)只調(diào)用一次。
析構(gòu)函數(shù)順序?yàn)椋?/p>
- 退出函數(shù)時(shí),執(zhí)行函數(shù)內(nèi)構(gòu)造的automatic對象的析構(gòu)函數(shù),注:static對象不析構(gòu);
- main函數(shù)中按構(gòu)造的逆序析構(gòu)automatic對象;
- 調(diào)用函數(shù)中定義的static對象的析構(gòu)函數(shù);
- 調(diào)用main中定義的static對象的析構(gòu)函數(shù);
- 最后調(diào)用全局對象的析構(gòu)函數(shù)。
注:復(fù)合中的構(gòu)造、析構(gòu)順序
???? 構(gòu)造:按聲明對象的順序來構(gòu)造成員對象,而不是按照構(gòu)造函數(shù)成員初始值列表中列出的順序;而且在包含它們的類對象(宿主對象)被構(gòu)造之前構(gòu)造。即:由內(nèi)向外構(gòu)造。
??? 析構(gòu):按對象構(gòu)造的逆序析構(gòu)。對于復(fù)合對象,先析構(gòu)主對象,再析構(gòu)其包含的對象。
//#i nclude <iostream.h>
#i nclude <iostream>
using namespace std;
class Demo {
?int id;
public:?
?Demo(int i) ?
?{?id = i;
?cout << "id=" << id << ",Con" << endl; }
?~Demo()
?{ cout << "id=" << id << ",Des" <<endl; }
};Demo d1(4);void fun(Demo d) {
?static Demo d2(2);
?Demo d3(3);
?cout << "fun" << endl;?
}
void main ()? {
?cout <<"main"<< endl;
?fun(d1);
?cout << "endmain" << endl;
?fun(d1);
?Demo * p = new Demo(8);
?
}
id=4,Con
main
id=2,Con
id=3,Con
fun
id=3,Des
id=4,Des
endmain
id=3,Con
fun
id=3,Des
id=4,Des
id=8,Con
id=2,Des//id=4,Des //在用<iostream.h>的時(shí)候才有此句輸出
posted on 2007-10-29 02:31 旅途 閱讀(1289) 評論(0) 編輯 收藏 引用 所屬分類: C/C++

