通过非常量引用在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 is "123"
e.get() 返回大量垃圾数据,直到碰巧碰到一个空字节。