好的,如果我使用RAII語言來管理某些上下文屬性*,如果我在try
區塊的開始處裸露地使用它,它是否會像我預期的那樣工作?關於RAII,C++`try` /`catch`塊是否與其他塊相同?
換句話說,如果我有這樣的:
struct raii {
raii() {
std::cout << "Scope init"
<< std::endl; }
~raii() {
std::cout << "Scope exit"
<< std::endl; }
};
...,我成功地使用它是這樣的:
{
raii do_the_raii_thing;
stuff_expecting_raii_context();
/* … */
}
...將RAII實例相同的方式工作,如果我這樣做:
try {
raii do_the_raii_thing;
stuff_expecting_raii_context_that_might_throw();
/* … */
} catch (std::exception const&) {
/* … */
}
這可能是一個愚蠢的問題,但我想檢查一下自己的理智 - 我對模糊不清他微妙的noexcept
擔保,以及其他異常相關的細節 - 所以請原諒我的天真
[*]對於那些好奇,這是Python的C-API的,我有RAII管理邪惡的GIL(全局解釋器鎖) ,在我的具體情況下
呵呵,這聽起來像它涉及例外(或至少它_can_) - 但我認爲你指的是這個問題解釋:http://stackoverflow.com/q/161177/298171 ...是? – fish2000
哎呀,我回復的評論已經消失了! – fish2000