理解构造函数和析构函数的调用顺序

#include  < fstream >

using   namespace  std;

ofstream 
out  ( " order.txt " );
#define  CLASS(ID) class ID{\
public : \
 ID(
int {out << #ID " constructor\n";} \
 
~ ID()  {out << #ID " destructor\n";} \
};

CLASS(base1);
CLASS(member1);
CLASS(member2);
CLASS(member3);
CLASS(member4);

class  derived1 :  public  base1
{
 member1 m1;
 member2 m2;
public:
 derived1(
int) : m2(1), m1(2), base1(3)
 
{
  
out << "derived1 constructor\n";
 }


 
~derived1()
 
{
  
out << "derived1 destructor\n";
 }

}
;

class  derived2 :  public  derived1
{
 member3 m3;
 member4 m4;
public:
 derived2():m3(
1),derived1(2),m4(3)
 
{
  
out << "derived2 constructor\n";
 }

 
~derived2()
 
{
  
out << "derived2 destructor\n";
 }

}
;


int  _tmain( int  argc, _TCHAR *  argv[])
{
 derived2 d2;
 
return 0;
}


order.txt的输出内容:
base1 constructor
member1 constructor
member2 constructor
derived1 constructor
member3 constructor
member4 constructor
derived2 constructor
derived2 destructor
member4 destructor
member3 destructor
derived1 destructor
member2 destructor
member1 destructor
base1 destructor

你可能感兴趣的:(构造函数)