先看测试代码,CTEST 继承自CBase,并包含一个CMember成员对象:

static        int        nIndex = 1;

class CMember
{
public:
CMember()
{
printf("%d CMember construct\n", nIndex++);
} ~CMember()
{
printf("%d CMember destruction\n", nIndex++);
}
}; class CBase
{
public:
CBase()
{
printf("%d CBase construction\n", nIndex++);
}
~CBase()
{
printf("%d CBase destruction\n", nIndex++);
}
}; class CTEST : public CBase
{ //Method:
public:
CTEST()
{
printf("%d CTEST construct\n", nIndex++);
} ~CTEST()
{
printf("%d CTEST destruction\n", nIndex++);
} CMember m_oMember; //测试成员对象构造和析构顺序
};

测试代码:

int main(int argc, char* argv[])
{
if (true)
{
CTEST oTest;
} getchar();
return 0;
}

运行结果:
C++浅析——继承类中构造和析构顺序-LMLPHP
1、构造顺序
基类→成员对象类→对象自身

2、析构顺序(与构造顺序相反)
对象自身→成员对象类→基类

05-07 15:46