Часто я нахожусь в ситуации, когда мне нужна простая оболочка RAII, но я не хотел бы создавать целый новый класс для этого по многим причинам, включая ограничения по времени и организационные проблемы.Мое быстрое решение - следующее:
Скажем, я хочу убедиться, что к концу области я хочу, чтобы логическое значение вернулось в исходное состояние:
bool prevState = currState;
currState = newState;
std::unique_ptr<int, std::function<void(int*)>> txEnder(new int(0), [&prevState](int* p) {
currState = prevState;
delete p;
});
Это решение прекрасно работает, но грязная часть заключается в необходимости выделить и освободить это целое число только для того, чтобы заставить unique_ptr
работать и вызывать пользовательский деструктор при уничтожении.
Есть ли более чистый способ сделать это безнеобходимость написать целый класс и избавиться от new
для манекена int
?