c ++设计问题试试看

时间:2011-02-25 17:31:04

标签: c++ exception scope-resolution

我有以下代码,其中dbh构造函数可能会抛出异常。我的问题是,dbh在try块中声明。捕获后是否可用?如果是,是否存在范围解析与{}不同的任何其他例外情况?如果没有,最好的设计选择是什么?

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;
}

2 个答案:

答案 0 :(得分:8)

  

捕获后是否可以使用?

没有。它将在声明它的块的末尾被销毁,就像任何其他局部变量一样。

try {
    dbhandler<recType> dbh(("dbName"),("table")); 
}   // dbh.~dbhandler<recType>() is called to destroy dbh
  

最佳设计选择是什么?

dbh块之外声明try或将使用它的所有代码移动到try块中。哪一个最有意义取决于您的具体用例。

在一个有点相关的说明中,如果你catch (...),你应该重新抛出异常或终止应用程序:你不知道正在处理什么异常,一般你不知道继续是否安全执行。

答案 1 :(得分:2)

根据你的功能代码,写它是很有意义的:

status func(const char* field, char** value)
{
    try {
        dbhandler<recType> dbh(("dbName"),("table"));
        status rc = dbh.start("key",field, val);
        return rc;
    }
    catch (std::runtime_error &e) {
        LOG_ERR << e.what() << endl ;
        return false;
    }
    catch (...) {
        LOG_ERR << "Unknown exception" << endl ;
        return false;
    }
}
相关问题