讓說我有RAII類:C++使用與析構函數RAII拋出
class Raii {
Raii() {};
~Raii() {
if (<something>) throw std::exception();
}
};
如果我具備的功能:
void foo() {
Raii raii;
if (something) {
throw std::exception();
}
}
這是不好的,因爲在清洗的第一個例外,我們可以再次拋出,這將終止進程。
我的問題是 - 什麼是一個很好的模式使用raii代碼清理可能拋出?
例如,這是好事還是壞事 - 爲什麼?
class Raii {
Raii() {};
~Raii() {
try {
if (<something>) throw std::exception();
}
catch (...) {
if (!std::uncaught_exception())
throw;
}
}
};
注意RAII對象總是棧上分配的對象 - 這是不是從析構函數的問題一般扔。
這與「如何防止終止如果我有一個其析構函數可以拋出的類」的更一般情況沒有任何區別。除了「析構函數不應該拋出」以外,我認爲沒有什麼好的答案。 – sfjac
沒有析構函數做一些工作,沒有RAII。我真的希望有一些事情可以做。說一些基於std :: uncaught_exception的地方,例如你可以檢測是否有異常。 – gsf