从这样的函数中抛出异常是违法的吗?
在Eclipse中它可以工作......
这是真的吗?我们可以抛出内部对象来抛出异常吗?
class Bad {
int i;
public:
void what() { cout << "exp" << i; }
};
class A {
public:
void f() {
Bad e;
throw e;
} // e are deleted by d'tor?
};
int main() {
A a;
try {
a.f();
} catch (Bad& e) // What happen here? we catch reference to some object that
// was deleted by Bad dt'or
{
cout << "in catch";
e.what(); // what happen here?
}
return 0;
}
答案 0 :(得分:3)
你的代码很好。 throw e;
制作e
的副本,在处理异常后将其销毁。处理程序被赋予对该副本的引用。
如果你扔了一个指向局部变量的指针,你可能会遇到麻烦;在处理异常之前,变量将被销毁,使指针无效。但扔任何指针在任何情况下都是一件奇怪的事情。