• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            旅途

            如果想飛得高,就該把地平線忘掉

            C++構(gòu)造函數(shù)與析構(gòu)函數(shù)執(zhí)行順序 ???

            今天在測(cè)試一個(gè)構(gòu)造函數(shù)和析構(gòu)函數(shù)的用例的時(shí)候,發(fā)現(xiàn)我們所鐘愛的VC6.0實(shí)在是Bug問題越來越多,對(duì)于學(xué)習(xí)C++的新手來講,有必要在這里給大家說明一下。

            構(gòu)造函數(shù)順序?yàn)椋?/p>

            1. ?全局對(duì)象的構(gòu)造函數(shù);
            2. ?main函數(shù)中對(duì)象的構(gòu)造函數(shù),包括automatic、static依次調(diào)用;
            3. ?main中遇到函數(shù)中有局部對(duì)象時(shí),進(jìn)入到函數(shù)中調(diào)用局部對(duì)象的構(gòu)造函數(shù)。

            ???? 注:static對(duì)象的構(gòu)造函數(shù)永遠(yuǎn)只調(diào)用一次。

            析構(gòu)函數(shù)順序?yàn)椋?/p>

            1. 退出函數(shù)時(shí),執(zhí)行函數(shù)內(nèi)構(gòu)造的automatic對(duì)象的析構(gòu)函數(shù),注:static對(duì)象不析構(gòu);
            2. main函數(shù)中按構(gòu)造的逆序析構(gòu)automatic對(duì)象;
            3. 調(diào)用函數(shù)中定義的static對(duì)象的析構(gòu)函數(shù);
            4. 調(diào)用main中定義的static對(duì)象的析構(gòu)函數(shù);
            5. 最后調(diào)用全局對(duì)象的析構(gòu)函數(shù)。

            注:復(fù)合中的構(gòu)造、析構(gòu)順序

            ???? 構(gòu)造:按聲明對(duì)象的順序來構(gòu)造成員對(duì)象,而不是按照構(gòu)造函數(shù)成員初始值列表中列出的順序;而且在包含它們的類對(duì)象(宿主對(duì)象)被構(gòu)造之前構(gòu)造。即:由內(nèi)向外構(gòu)造。

            ??? 析構(gòu):按對(duì)象構(gòu)造的逆序析構(gòu)。對(duì)于復(fù)合對(duì)象,先析構(gòu)主對(duì)象,再析構(gòu)其包含的對(duì)象。

            比如有以下的測(cè)試用例:
            //#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);
            ?
            }

            程序執(zhí)行的時(shí)候,在VC6 withSp6下運(yùn)行的結(jié)果

            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í)候才有此句輸出
            ??????? 其中包含有注釋的部分,為調(diào)整包含的頭文件為<iostream.h>的情況下才有的輸出。如果使用 命名空間的std的話,沒有最后的一句輸出。
            ????????從百度上找了半天,才發(fā)現(xiàn)不是沒有調(diào)用全局變量的析構(gòu)函數(shù),而是因?yàn)槲覀兯玫木幾g器有問題,這是MS的產(chǎn)品對(duì)于C++的支持做的不是盡善盡美,有網(wǎng)友說在Vc7.0中好想消除了這個(gè)Bug。

            posted on 2007-10-29 02:31 旅途 閱讀(1264) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C/C++

            久久久WWW成人| 久久水蜜桃亚洲av无码精品麻豆| 久久亚洲AV成人出白浆无码国产| 天堂久久天堂AV色综合| 久久99精品久久久久久久不卡| 97久久精品无码一区二区天美| 99久久人人爽亚洲精品美女| 青青久久精品国产免费看| 伊人久久久AV老熟妇色| 青青青青久久精品国产h| 2021国产精品午夜久久| 亚洲伊人久久大香线蕉苏妲己| 久久亚洲中文字幕精品一区| 99久久久精品| 亚洲国产精品一区二区久久hs| 91久久香蕉国产熟女线看| 久久婷婷五月综合色奶水99啪 | 国内精品久久久久久久涩爱| 久久久高清免费视频| 国产成人香蕉久久久久| 人妻无码中文久久久久专区| 日韩十八禁一区二区久久 | 久久午夜无码鲁丝片秋霞| 97久久精品午夜一区二区| 欧美精品乱码99久久蜜桃| 久久精品国产一区二区三区| 久久久无码精品亚洲日韩蜜臀浪潮| 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 久久天天躁狠狠躁夜夜躁2014| 国产精品99久久久久久猫咪| 2022年国产精品久久久久| 久久久久久精品久久久久| 欧美成a人片免费看久久| 亚洲国产天堂久久综合网站| av午夜福利一片免费看久久| 少妇精品久久久一区二区三区| 99精品国产免费久久久久久下载 | 久久久综合香蕉尹人综合网| AA级片免费看视频久久| 国产午夜精品久久久久九九电影 | 久久伊人亚洲AV无码网站|