- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
transaction::~transaction()
{
if (db_) {
int rc = db_->execute(fcommit_ ? "COMMIT" : "ROLLBACK");
if (rc != SQLITE_OK)
throw database_error(*db_);
}
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+170
transaction::~transaction()
{
if (db_) {
int rc = db_->execute(fcommit_ ? "COMMIT" : "ROLLBACK");
if (rc != SQLITE_OK)
throw database_error(*db_);
}
}
(c) http://code.google.com/p/sqlite3pp/source/browse/trunk/sqlite3pp.cpp#486
пожалуй, здесь нехватает картинки в стиле Nichtlustig с подписью "лемминг делает throw в деструкторе"
absolut 27.03.2011 09:26 # +2
gegMOPO4 28.03.2011 00:12 # 0
Кстати, вроде бы в C++0x деструкторы сделали nothrow. Чтобы не искушать.
TheCalligrapher 28.03.2011 03:40 # +4
В данном случае проблема именно в этом. Т.е. проблема тут не в наличии 'throw', а в отсутствии локального 'catch'.
absolut 28.03.2011 08:19 # +2
Я думаю, это подразумевалось. Просто не было так развернуто, как у Вас.
С другой стороны, особого смысла делать локальные throw/catch как-то неожиданно - проще выйти по условию.
Lure Of Chaos 28.03.2011 15:33 # +1
По поводу (не-)возможности бросания исключений из деструктора, все верно - если команда на уничтожение поступила - обьект должен быть удален безусловно, особенно при наличии во многих языках сборщика мусора - который вряд ли решит корректно, что делать, если обьект не мог быть удален.
Еще одна причина, почему это бессмысленно - если ресурс с обьектом недоступен - значит, он тоже не существует (хотя бы в данный момент), следовательно, "связь" с обьектом нарушена, следовательно - и обьект тоже превратился в мусор.
А задача по уборке мусора (что-то вроде "дефрагментации") должна выполняться сторонним процессом.
Что и требовалось доказать
gegMOPO4 28.03.2011 16:44 # +1
Lure Of Chaos 28.03.2011 16:56 # +1
gegMOPO4 28.03.2011 16:36 # +4
CHayT 28.03.2011 21:15 # 0
+1
Lure Of Chaos 28.03.2011 21:41 # 0
gegMOPO4 28.03.2011 22:10 # +1
absolut 28.03.2011 22:15 # 0
gegMOPO4 28.03.2011 22:38 # +1