如何访问在 try 语句中初始化的对象
How to access objects that were initialized in a try statement
我是 C++ 的新手,想知道您是否可以执行以下操作,或者您是否有更好的方法。
我的数据库处理程序有一个自定义异常 class:我在 main 中使用它是这样的:
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 之外使用该对象?我的意思是,如果它抛出异常,它将 return 1 并在到达另一个对象之前停止 main()。
您的 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);
您可以使用指针:
DatabaseHandler *DGeneDB;
try {
DGeneDB = new DatabaseHandler("string/to/path");
}catch(DatabaseHandlerExceptions &msg) {
// your error stuff here
}
DGeneDB->foo();
但不要忘记用完后删除
我是 C++ 的新手,想知道您是否可以执行以下操作,或者您是否有更好的方法。
我的数据库处理程序有一个自定义异常 class:我在 main 中使用它是这样的:
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 之外使用该对象?我的意思是,如果它抛出异常,它将 return 1 并在到达另一个对象之前停止 main()。
您的 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);
您可以使用指针:
DatabaseHandler *DGeneDB;
try {
DGeneDB = new DatabaseHandler("string/to/path");
}catch(DatabaseHandlerExceptions &msg) {
// your error stuff here
}
DGeneDB->foo();
但不要忘记用完后删除