C++中對(duì)象構(gòu)造順序

單個(gè)對(duì)象的構(gòu)造與析構(gòu)


  • 單個(gè)對(duì)象創(chuàng)建時(shí)構(gòu)造函數(shù)的調(diào)用順序
    • 1、調(diào)用父類的構(gòu)造過(guò)程
    • 2、調(diào)用成員變量的構(gòu)造函數(shù)(調(diào)用順序與聲明順序相同)
    • 3、調(diào)用類自身的構(gòu)造函數(shù)
  • 析構(gòu)函數(shù)與對(duì)應(yīng)構(gòu)造函數(shù)的調(diào)用順序相反
  • 多個(gè)對(duì)象析構(gòu)時(shí)
    • 析構(gòu)順序與構(gòu)造順序相反
  • 對(duì)于棧對(duì)象和全局對(duì)象,類似于入棧與出棧的順序,最后構(gòu)造的對(duì)象被最先析構(gòu)
  • 堆對(duì)象的析構(gòu)發(fā)生在使用delete的時(shí)候,與delete的使用順序相關(guān)

局部對(duì)象


  • 對(duì)于局部對(duì)象
    • 當(dāng)程序執(zhí)行流到達(dá)對(duì)象的定義語(yǔ)句時(shí)進(jìn)行構(gòu)造

舉個(gè)??:

    int i = 0;
    Test a1 = i;
        
    while( i < 3 )
    {
        Test a2 = ++i;
    }
        
    if( i < 4 )
    {
        Test a = a1;
    }
    else
    {
        Test a(100);
    }

在這段代碼里Test類構(gòu)造順序是按照程序的執(zhí)行流依次往下進(jìn)行。

堆對(duì)象


  • 對(duì)于堆對(duì)象
    • 當(dāng)程序執(zhí)行流到達(dá)new語(yǔ)句時(shí)創(chuàng)建對(duì)象
    • 使用new創(chuàng)建對(duì)象將自動(dòng)觸發(fā)構(gòu)造函數(shù)的調(diào)用

再次舉??:

    int i = 0;
    Test* a1 = new Test(i); // Test(int i): 0
        
    while( ++i < 10 )
        if( i % 2 )
            new Test(i); // Test(int i): 1, 3, 5, 7, 9
        
    if( i < 4 )
        new Test(*a1);
    else
        new Test(100); // Test(int i): 100

在這段代碼中只有執(zhí)行new時(shí)在堆空間分配空間后才執(zhí)行構(gòu)造方法。

全局對(duì)象


  • 對(duì)于全局對(duì)象
    • 對(duì)象的構(gòu)造順序是不確定的
    • 不同的編譯器使用不同的規(guī)則確定構(gòu)造順序

最后舉一次??:

#include "test.h"

Test t4("t4");

int main()
{
    Test t5("t5");
}

這里的Test是全局對(duì)象,那它的構(gòu)造順序就不確定,依編譯器而定。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、溫故而知新 1. 內(nèi)存不夠怎么辦 內(nèi)存簡(jiǎn)單分配策略的問(wèn)題地址空間不隔離內(nèi)存使用效率低程序運(yùn)行的地址不確定 關(guān)于...
    SeanCST閱讀 8,133評(píng)論 0 27
  • 1. C++基礎(chǔ)知識(shí)點(diǎn) 1.1 有符號(hào)類型和無(wú)符號(hào)類型 當(dāng)我們賦給無(wú)符號(hào)類型一個(gè)超出它表示范圍的值時(shí),結(jié)果是初始值...
    Mr希靈閱讀 18,169評(píng)論 3 82
  • 1.面向?qū)ο蟮某绦蛟O(shè)計(jì)思想是什么? 答:把數(shù)據(jù)結(jié)構(gòu)和對(duì)數(shù)據(jù)結(jié)構(gòu)進(jìn)行操作的方法封裝形成一個(gè)個(gè)的對(duì)象。 2.什么是類?...
    少帥yangjie閱讀 5,124評(píng)論 0 14
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,676評(píng)論 1 51
  • 收集非原創(chuàng)文章,如遇原作者,請(qǐng)私聊我,我會(huì)表明出處! 1--10 1. C++中什么數(shù)據(jù)分配在?;蚨眩o態(tài)存儲(chǔ)區(qū)以...
    Juinjonn閱讀 5,045評(píng)論 0 30

友情鏈接更多精彩內(nèi)容