我有以下代码,其中dbh构造函数可能会引发异常。我的问题是,dbh在try块内声明。捕获后可以使用吗?如果是,范围解析度不同于{}的其他任何异常(exception)吗?如果没有,最佳的设计选择是什么?
status func(const char* field, char** value)
{
try {
dbhandler<recType> dbh(("dbName"),("table"));
}
catch (std::runtime_error &e) {
LOG_ERR << e.what() << endl ;
return false;
}
catch (...) {
LOG_ERR << "Unknown exception" << endl ;
return false;
}
rc = dbh.start("key",field, val);
return rc;
}
最佳答案
不会。它会在声明它的块的末尾销毁,就像其他任何局部变量一样。
try {
dbhandler<recType> dbh(("dbName"),("table"));
} // dbh.~dbhandler<recType>() is called to destroy dbh
在
dbh
块之外声明try
或将使用它的所有代码移到try
块中。哪一种最有意义取决于您的特定用例。稍微相关一点,如果您使用
catch (...)
,则应该重新抛出该异常或终止该应用程序:您不知道正在处理什么异常,并且通常您不知道继续执行是否安全。关于c++ - C++设计问题 try catch ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5120552/