通过非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