为什么函数调用NULL指针在C ++中工作?

时间:2014-08-26 12:11:01

标签: c++

我尝试了这个简单的代码,但我得到了一个奇怪的结果:

#include <iostream>

class CTest
{
public:
    void Function() { std::cout << "CTest::Function()" << std::endl; }
};

int main()
{
    CTest *pTest = new CTest;
    delete pTest;
    pTest = NULL;
    pTest->Function();
}

使用以下参数与GCC进行编译:{{1​​}}

当我运行程序时,我得到了这个结果:

g++ -O0 Test.cpp -o Test

这怎么可能?

1 个答案:

答案 0 :(得分:4)

取消引用空指针是undefined behavior,并且未定义的行为是偷偷摸摸的,有时它可能似乎有效。

在您的特定情况下,它很可能是有效的,因为它是纯成员函数调用,并且成员函数不对对象内部状态做任何事情。如果添加成员变量并尝试在成员函数中访问它,则可能会导致崩溃。