如何访问在try语句中初始化的对象

时间:2015-01-11 08:51:48

标签: c++ exception exception-handling scope

我是C ++的新手,想知道你是否可以做到以下几点,或者你有更好的方法。

我的数据库处理程序有一个自定义异常类:我在我的主体中使用它,如下所示:

int main(int argc, char const ** argv){
    try {
        DatabaseHandler DGeneDB = DatabaseHandler("string/to/path");
    }catch(DatabaseHandlerExceptions &msg) {
        std::cerr << "Couldn't open Database" << std::endl;
        std::cerr << msg.what();
        return 1;
    }
    DGeneDB.foo() //Can't access this object since it was initialized in try statement
    return 0;
}

我想用DGeneDB对象做十亿件事,并且不想在try语句中完成所有操作。我只想捕获初始化期间抛出的构造函数异常。我应该怎么做才能使用try之外的对象?我的意思是,如果它抛出异常,它将返回1并在它到达另一个对象之前停止main()。

1 个答案:

答案 0 :(得分:2)

您的Databasehandler是否有open方法,或者类似的方法?如果没有,请创建一个并修改该构造函数,以便它不再打开数据库连接(因此它不会抛出)。你的代码看起来像这样:

DatabaseHandler DGenDB;
try {
    DGenDB.open(dbpaths.Dgene_db);
}
catch (DatabaseHandlerExceptions &msg) {
    return 1;
}

注意:在您的原始代码中,您有这样一行:

DatabaseHandler DGeneDB = DatabaseHandler(dbpaths.Dgene_db);

这是在C ++中初始化变量的一种不寻常的方法。你刚才可以写:

DatabaseHandler DGeneDB(dbpaths.Dgene_db);