#include <iostream>
using namespace std;
class A
{
public:
void Func(void){ cout << "Func of class A" << endl; }
};
A* Test(void)
{
A *p;
A a;
p = &a; // 注意 a 的生命期
return p;
}
void main()
{
// 这段程序搞笑了
A *q;
/*q = Test();*/
q = NULL;
q->Func();
system("pause");
}
代码如上,输出结果为“Func of class A”,可是我明明将q变为空指针了。
如果去掉代码“q = NULL;”,编译出错。
如果取消注释/*q = Test();*/,不论是否注释“q = NULL;”,结果还是输出“Func of class A”,可是栈里面的a对象明明已经被自动销毁了,这个时候返回的q应该是野指针才对吧?
这一切的一切,是为啥呢?难道C++和C的底层原理不同?
|