從這樣的函數拋出異常是非法的嗎?
在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;
}
很明顯,不是重複的,@ bames53。 – 2014-09-01 19:23:17
與'return e;'作用相同,而不是返回本地創建副本。 – Vladp 2014-09-01 19:25:56
@LightnessRacesinOrbit對我來說這似乎很清楚,它是重複的。 http://stackoverflow.com/questions/1860064/catching-exception-objects-by-reference-temporaries-lifetime-issues這兩個問題都在問,如何通過引用來捕獲在範圍退出時被銷燬的對象是可能的,因爲在這一點上不應該引用無效? – bames53 2014-09-02 16:38:34