通過非const引用拋出一個構建在try-block中的堆棧上的對象,捕獲它並修改它,然後通過引用另一個catch塊來拋出它嗎?通過引用拋出非常量臨時對象
下面是我所指的一個簡短例子。
struct EC {
EC(string msg) { what = msg; }
string where;
string what;
void app(string& t) { where += t; }
string get() { return what; }
};
try {
try {
try {
EC error("Test");
throw error;
}
catch (EC& e) {
e.app("1");
throw e;
}
}
catch (EC& e) {
e.app("2");
throw e;
}
}
catch (EC& e) {
e.app("3");
cout << e.where << endl;
cout << e.get() << endl;
}
是否有可能導致e.what包含垃圾,但e.where保持完好?例如:
e.where是「123」
e.get()返回大量垃圾數據,直到碰巧碰到空字節爲止。
無法重現。也不會用app()中的非const引用進行編譯。無論如何,你不會拋出一個引用,你會拋出一個副本。 – UncleBens 2010-02-16 17:04:51
這並不意味着編譯。該代碼只是說明我指的是什麼。我問是否可能導致e.get()包含垃圾數據,而不是如果它編譯和工作。 – 2010-02-16 17:07:17
鑑於這不是真正的代碼,如果需要複製構造函數,e.get()不會返回垃圾。 – 2010-02-16 17:47:59