【发布时间】:2011-12-07 16:02:04
【问题描述】:
我有以下问题。
我有被回收的数据库连接(放回池中)。
例如:
{
session sql(conn_str); // take connection from pool
sql.exec("insert into ...")
} // at the end of the scope return connection to pool
但在某些情况下,回收可能是错误的 - 例如断开连接或其他一些重大错误。
所以我想自动防止连接被回收。我想要
使用std::uncaught_exception 实现以下技术 - 所以 exec() 函数
将检测异常并防止回收:
session::exec(...)
{
guard g(this)
real_exec(...);
}
在哪里看守:
class guard {
public:
guard(session *self) : self_(self) {}
~guard() {
if(std::uncaught_exception()) {
self->mark_as_connection_that_should_not_go_to_pool();
}
}
}
现在,我知道 http://www.gotw.ca/gotw/047.htm 不建议使用
std::uncaught_exception 在另一种情况下,我也没有看到我的代码有任何问题,
提供了讨论的示例。
这段代码是否有任何可能的问题。
注意:
- 我希望此更改是非侵入性的,以便 SQL 后端能够抛出而不检查每个案例是否是关键的。
- 我不希望用户对此采取任何行动,因此对他来说是透明的。
【问题讨论】:
标签: c++ exception-handling uncaught-exception