#include <db.hpp>
void f( oess_1::db::cln::db_t & db ) { // Начинаем транзакцию. oess_1::db::cln::transaction_t trx( db ); // Выполняем какие-то действия с базой. ... // Подтверждаем транзакцию. trx.commit(); }
Деструктор исключений не выпускает. Для того, чтобы узнать, произошло ли в деструкторе исключение необходимо в конструкторе передать указатель на поток сообщений об ошибках:
void f( oess_1::db::cln::db_t & db ) { // Начинаем транзакцию. oess_1::db::cln::transaction_t trx( db, &std::cerr ); // Создаем какой-то объект. oess_1::ent_id_t id = db.ent_create( "some_slice", some_object_t() ); // Удалим его. db.ent_destroy( id ); // Удалим его и вызовем исключение. db.ent_destroy( id ); // При выходе из из функции по-исключению деструктор // вызовет откат транзакции. Но исключение из деструкторе // выпущено не будет. }
Открытые члены | |
transaction_t (db_t &db, std::ostream *errs=0) | |
void | commit () |
Подтвердить транзакцию. | |
Закрытые данные | |
db_t & | m_db |
База, в которой проводится транзакция. | |
bool | m_is_finished |
Была ли завершена транзакция? | |
std::ostream * | m_errs |
обнаруженных в деструкторе. |
void commit | ( | ) |
Подтвердить транзакцию.
Даже, если возникнет исключение, откат в деструкторе осуществляться не будет.