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)
C++没有"NullPointerException".取消引用空指针只是未定义的行为,任何事情都可能发生.
在您的情况下,sayHello()根本不访问*this,所以它恰好"正常"工作(在您的编译器,优化设置,运行时和HW).但这并不能保证.未定义的行为是未定义的; 该程序也可以在线崩溃或订购披萨.