在以下代码中:
#include <iostream>
class Exception{
public:
virtual void print(){
std::cerr << "Exception\n";
}
};
class NullPointerException : public Exception{
public:
void print(){
std::cerr << "NullPointerException\n";
}
};
int main(){
try{
throw NullPointerException();
}catch(Exception e){
e.print();
}
return 0;
}
为什么G ++编译的程序会打印“Exception”而不是“NullPointerException”。如果我想要“NullPointerException”,我该怎么办?
答案 0 :(得分:3)
你应该总是通过引用捕获。 Const引用也不是一个坏主意,因为你通常不需要修改异常:
catch(const Exception& e)
否则你就是&#34;切片&#34;例外,这是一个常见的错误。更不用说在飞行过程中复制异常是一个非常糟糕的主意 - 如果它需要分配内存来复制,它被抛出的原因是因为系统内存不足?
另外,您应该从std::exception
中获取例外情况。