Поскольку при выдаче исключения гарантированно выполняется только код, являющийся деструктором, такой код может вызвать утечку памяти
std::mutex foo;
foo.lock();
// My code which might throw an exception
foo.unlock();
Рекомендуется ли делать что-то подобное илиесть другой лучший вариант?Идея состоит в том, чтобы использовать преимущества RAII, чтобы гарантировать, что мьютекс будет освобожден, если возникнет исключение.
std::mutex foo;
{
std::lock_guard<std::mutex>(foo);
// My code which might throw an exception
}