先看測試代碼,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;
}
運行結果:1、構造順序
基類→成員對象類→對象自身
2、析構順序(與構造順序相反)
對象自身→成員對象類→基類