OK so if I am using a RAII idiom to manage some context attribute*, will it work as I expect if I use it nakedly in at the start of a try
block?
In other words, if I have this:
struct raii {
raii() {
std::cout << "Scope init"
<< std::endl; }
~raii() {
std::cout << "Scope exit"
<< std::endl; }
};
… and I am successfully using it like this:
{
raii do_the_raii_thing;
stuff_expecting_raii_context();
/* … */
}
… will the RAII instance work the same way if I do this:
try {
raii do_the_raii_thing;
stuff_expecting_raii_context_that_might_throw();
/* … */
} catch (std::exception const&) {
/* … */
}
This is probably a dumb question, but I want to check my own sanity on this – I am fuzzy on the subtleties of noexcept
guarantees, and other exception-related minutiae – so pardon my naíveté
[*] for those curious, it’s the Python C-API’s nefarious GIL (global interpreter lock) that I am managing with RAII, in my specific case