空指针可访问

Mat*_*ats 2 c++ null pointers exception delete-operator

我想知道为什么以下小程序不会导致NullPointerException.有任何想法吗?输出是2x Hello World !!! 在我的macbook上使用clang-500.2.79.

#include <iostream>

using namespace std;

class Strange {
public:
    Strange() {}
    virtual ~Strange() {}
    void sayHello() {
        cout<<endl<<"Hello World!!!"<<endl;
    }

};

int main(void) {
    Strange* s = new Strange();
    delete s; s = NULL;
    s->sayHello();
    (*s).sayHello();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Rei*_*ica 8

C++没有"NullPointerException".取消引用空指针只是未定义的行为,任何事情都可能发生.

在您的情况下,sayHello()根本不访问*this,所以它恰好"正常"工作(在您的编译器,优化设置,运行时和HW).但这并不能保证.未定义的行为是未定义的; 该程序也可以在线崩溃或订购披萨.