為了研究c++類的成員變數的構造析構順序,於是寫了上面的3個類,a,b,c。其中c類包含a類和b類的成員變數。當在main函式中構造c類的物件時,發現先構造a類的物件,再構造b類的物件,也就是構造時先構造寫在上面的成員變數,再構造寫在下面的成員變數。當c類的物件被析構時,發現先析構b類的物件,再析構a類的物件,也就是析構時先析構寫在下面的類,再析構寫在上面的類。通過列印資訊,構造和析構順序一目了然。
也許我會被認為無聊,研究這個做什麼。其實是因為工作上的問題,拖延了我半年之久,始終不知道為什麼,也不可能有任何人有閒工夫幫我看我的**找問題。我遇到的問題是程式在結束時,就會崩潰。其實我的第一感覺是對的,一定跟析構有關。但是不容易找到具體是哪齣的問題。因為程式執行時沒問題,並且是以服務的形式執行的,一般不會停,所以此問題一直放著沒有解決。當程式設計習慣不好,或者說能力有限,導致類與類之間相互依賴時,就會出問題了。比如上面的例子,在析構時b先析構的,a後析構的。如果a依賴b,那麼在a異構時如果使用b的成員變數,並且存在b一定沒有被析構的斷言巨集,程式就掛了。此時如果調整a與b在c中的位置,那麼a先析構,b後析構,程式結束時就不會掛了。
所以在寫c++的類的時候,最好要把簡單基礎的成員變數寫在上面,複雜的成員變數寫在下面。
C 類構造與析構順序
1.虛基類建構函式被呼叫,以繼承順序從左到右 如果存在虛基類 2.上一層非虛基類建構函式被呼叫,以繼承順序從左到右而非成員初值列上寫的順序 顯示呼叫或缺省構造 如果存在非虛基類 3.虛表指標指向適當虛表 如果類存在虛表指標 4.類資料成員初始化,以宣告的順序而非成員初值列上寫的順序。5.執行使用者所...
c 構造 析構順序
在建立class a的乙個物件的時候,拿new運算子來說,他總是會先去請求一塊該物件期望大小的記憶體,然後呼叫class a的建構函式並傳入所申請記憶體的位址作為this指標完成構造。如果class a有其他類型別的成員變數,或者繼承自其他類的話,他們的構造順序又會是怎樣的呢?下邊是測試 class...
c 組合類的構造,複製構造,析構順序
先貼 include using namespace std class cat public cat int intialage catage intialage cout 餘童蘭上課習題,被點名回答,沒答案上來 有兩個類 cat和 dog zoo乙個組合類,包含cat和dog 各有 構造,複製構...