不像java可以catch NullPointerException。
#include <iostream>
#include <exception>
#include <signal.h>
#include <string.h>
using namespace std;
class A {
public:
A() : pa(NULL), inta(-1) {}
A* getPa() { return pa; }
void fun() { cout << "fun" << endl; }
int getInta() const { return inta; }
private:
A* pa;
int inta;
};
ostream& operator << (ostream& out, const A& a) {
return out << "inta: " << a.getInta() << endl;
}
int main() {
A a;
A* pa = a.getPa();
if(pa == NULL) {
cout << "is null" << endl;
}
cout << "pa->fun()" << endl;
pa->fun();
cout << "pa" << endl;
cout << pa << endl;
cout << "*pa" << endl;
// segment fault, try catch does not help.
// catch or ignore SIGSEGV also does not help,
// because after ignored or catched the signal,
// the defending operation will be fired again.
// ie., the cout << *pa << endl; will be executed again.
cout << *pa << endl;
cout << "here" << endl;
}