Используйте следующее:
transaction tr(db);
...
tr.commit();
Когда tr.commit()
завершает, он устанавливает состояние «совершено», а деструктор ничего не делает,
в противном случае это откаты.
Проверка на исключение - плохая идея, рассмотрим:
transaction tr(db);
...
if(something_wrong)
return; // Not throw
...
tr.commit();
В этом случае вы, вероятно, скорее ожидаете откат , чем фиксация, но фиксация будет выполнена.
Редактировать: но, если вы все еще хотите этого, посмотрите на std::uncaught_exception()
, но прочитайте это первое http://www.gotw.ca/gotw/047.htm