有人可以解释为什么以下代码能够调用SayHello函数并打印出“Hello”。
构造函数和析构函数永远不会被调用,因为实际上没有创建对象,那么为什么我可以调用SayHello函数?
class A
{
public:
A()
{
std::cout<<"In Constructor"<<std::endl;
};
~A()
{
std::cout<<"In Destructor"<<std::endl;
};
void SayHello()
{
std::cout<<"Hello"<<std::endl;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
A* a = nullptr;
a->SayHello();
return 0;
}
答案 0 :(得分:3)
这是未定义的行为。它恰好起作用,因为SayHello
无法访问任何成员数据。不要这样做。