c ++设计问题试试看

Kir*_*ran 2 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;
}
Run Code Online (Sandbox Code Playgroud)

Jam*_*lis 8

捕获后是否可用?

不会.它会在声明它的块的末尾被销毁,就像任何其他局部变量一样.

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

什么是最好的设计选择?

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

在某种程度上相关的说明,如果您catch (...),您应该重新抛出异常或终止应用程序:您不知道正在处理什么异常,并且通常您不知道继续执行是否安全.