C 物件構造順序

2021-08-10 16:37:39 字數 425 閱讀 3310

程式裡不可能只有乙個物件,我們的程式裡處處都是物件,那麼物件的構造順序是怎麼樣的呢。

還是按照在記憶體四區上的分布來分開說,此處不在說**段。

如果物件是在棧上分配的,那麼肯定是在函式中建立的,只要main函式開始執行,就有了程式執行流,所以分配在棧上的物件的構造順序是按照順序執行流和物件的定義語句來確定先後順序的。

如果物件在分配在堆上的,那麼我們值需要跟著程式執行流找到new出現的先後順序就可以了,基本上和棧的是一樣的,不過可以通過new來檢視。

如果是分配在全域性區的就比較麻煩了。如果是static的區域性物件,那麼把它分到堆疊上就可以,如果是全域性的話,它的順序就是不定的了,因為這時候還沒有程式執行流,因為不同的編譯器會自己定義一套規則去實現物件的構造,所以獲取可以在乙個編譯器上分析出全域性物件的構造順序,但是不一定可以適合別的編譯器。所以全域性的物件的構造順序是不確定的。

C 物件的構造順序

在c 中物件的構造順序有三種 1 區域性構造物件順序 2 堆物件構造順序 3 全域性物件構造順序 1 區域性構造物件順序構造物件例子 當程式執行流到達物件的定義語句時進行構造 include class test test const test obj int main if i 4 else re...

C 物件的構造順序解析

include using namespace std class test test test const test obj void operator const test obj private int ma int main 以上 的執行結果是 當我們使用test t1 test 50 拷貝...

C 派生類物件構造順序

構造依如下順序 1.呼叫本類的基類的建構函式 1.1 按照基類成員定義順序對每個成員執行初始化 1.2 執行基類建構函式體 2.呼叫本類的建構函式 2.1 按照本類成員定義順序引用初始化列表對每個成員執行初始化 2.2 執行本類建構函式體 總結為一句 首先初始化本類的基類部分,然後按照宣告的順序依次...