我有以下代码,其中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/

10-09 09:43