// 2002/07/05 // awzzz
// 研究观察C++一种有意思的构造析构函数调用现象
// 现象 // 在构造函数A中调用重载的构造函数B // 结论 // 在B被调用结束(A未结束)时已经有一次析构函数被调用
// 关注
// 测试平台 // 1.Win2K + VC6 // 2.Linux + gcc
/* //程序运行输出 CTest(0, 0) ~CTest() m_CTestCount = 1 CTest(0) ~CTest() m_CTestCount = 2 CTest() main() ~CTest() m_CTestCount = 3 //程序运行输出 */
#include <stdio.h>
class CTest { public: CTest() { CTest(0);
//已经调用析构函数
printf("CTest()\r\n"); } virtual ~CTest() { m_CTestCount++; printf(" ~CTest() m_CTestCount = %d\r\n", m_CTestCount); } CTest(int i) { CTest(i, 0);
//已经调用析构函数
printf("CTest(%d)\r\n", i); } CTest(int i, int j) { printf("CTest(%d, %d)\r\n", i, j); } static int m_CTestCount; };
int CTest::m_CTestCount = 0;
int main() { CTest cT;
printf("main()\r\n");
//调用析构函数
return 0; }

|