Пользуются свойствами блока кода:
1. создается новая область видимости
2. объект, созданный внутри блока кода, удалится по завершению (т.е вызовется деструктор). В сочетании с RAII иногда удобно.
// Когда не хочется придумывать новое имя другой переменной, которая точно такая же по смыслу.
// И хочется дать ей константность - ее менять я не собираюсь, в смысле изменчивости переменной.
const bool ok = foo1();
if (!ok)
return;
{
const bool ok = foo2();
if (!ok)
return;
}
// Когда надо защитить мьютексом изменение переменной, на как можно более короткое время.
... некий код
{
const std::lock_guard<std::mutex> lock(_mutex);
++i;
// _mutex is automatically released when lock goes out of scope
}
... продолжаем код
Или замерить время выполнения части кода. Создаем объект, в конструкторе которого захватываем текущее время, в деструкторе выводим затраченное время в лог.