一个对非静态成员函数及指针的试验(请高手分析原理)
huche 2004-04-19 01:15:55 #include "iostream.h"
class CTest
{
public:
CTest(){m_nTest = 5;};
~CTest(){};
void Func(void)
{ cout << "Func of class CTest" << endl;
cout << m_nTest << endl;
}
private:
int m_nTest;
};
void Test(void)
{
CTest *p;
{
CTest test;
p = &test;
}
p->Func(); // 能够正常输出,内存竟然没有释放?
}
void Test2(CTest **p)
{
CTest test;
*p = &test;
}
void main()
{
Test();
CTest *p;
Test2(&p);
p->Func(); // 函数能够正常执行,只是m_Test输出不对,说明m_nTest被释放
CTest *p2;
p2->Func(); // 函数能够被调用,只是访问m_nTest报访问内存错误.
}
// 在我机器上,程序执行结果为
// Func of class CTest
// 5
// Func of class CTest
// 4198688
// Func of class CTest
// "弹内存访问错误框"
// 上述表明调用类的成员函数并不需要初始化该类的对象,条件是不需要访问该类的成员变量。
// void CTest::Func(void) 被编译为 void Func(const CTest *this);
// 但是其他的我就无法解释了,请大家帮忙分析分析。