天天看點

C++ 構造函數的構造順序和析構函數的析構順序

有三個類A,B,C。B是A的子類,C又是B的子類。代碼如下:

class A  
{  
public:  
    A(){ cout << "new A " << endl; }
    ~A(){cout << "delete A" << endl;}  
};    
class B : public A  
{  
public:  
   B(){cout << "new B " << endl;};
   ~B(){cout << "delete B" << endl;};  
};  

class C : public B  
{  
public:  
   C(){cout << "new C " << endl;}
   ~C(){cout << "delete C" << endl;};
};           

以下是測試代碼以及輸出的結果:

C++ 構造函數的構造順序和析構函數的析構順序

第一個(p1)就不用說了,new一個A,然後再delete;

第二個(p2)new了一個C,構造函數從C的祖先開始向下構造,析構的時候在從C開始向上構造;

第三個(p3) (和第四個類似,直接參考第四個);

第三個(p3)new了一個C,構造函數從C的祖先開始向下構造,然後賦給指針p4,但是p4是B型的,是以new出的類飲食轉換為B類型,是以析構的時候是從B開始向上構造。