【发布时间】:2022-01-10 09:50:16
【问题描述】:
我使用共享指针,因为变量只能存在于创建它的块中。
int main(void) {
std::shared_ptr<project::log::Log> log;
try {
log = make_shared<annmu::log::Log>("error.log"); // can throw eception
}
catch(std::exception &e) {
std::cout << "Error\n\n";
return 0;
}
}
我想避免共享指针并创建更简单的代码。类似于下面的代码(不工作的代码)。
int main(void) {
project::log::Log log; // can throw eception
try {
log = project::log::Log("error.log"); // can throw eception
}
catch(std::exception &e) {
std::cout << "Error\n\n";
return 0;
}
}
这是避免共享指针的好方法吗?它是更有效的解决方案吗?在第二种解决方案中,对象被创建了两次。
谢谢你的回答。
【问题讨论】:
-
为什么不在
try块内简单地定义log变量? -
因为它可以抛出异常。
-
是的,这就是为什么你要在
try块中创建它,对吧?那么为什么不简单地在try块内定义变量呢?如try { project::log::Log log("error.log"); /* Other code... */ } -
把所有东西都写下来试试{}是个好习惯吗?并做嵌套的尝试{}捕捉{}?
-
如果你在嵌套 try/catch 块,你很可能遇到了结构问题,需要重新考虑。
标签: c++ reference try-catch shared-ptr