gpt4 book ai didi

c++ - 如何捕获构造函数异常?

转载 作者:可可西里 更新时间:2023-11-01 15:36:25 40 4
gpt4 key购买 nike

我有一个 C++ 类,它在失败时从构造函数中抛出异常。如何分配此类的本地实例(不使用 new)并处理任何可能的异常,同时保持 try block 作用域尽可能小?

本质上,我正在寻找与以下 Java 惯用语等效的 C++:

boolean foo() {
Bar x;
try {
x = new Bar();
} catch (Exception e) {
return false;
}
x.doSomething();
return true;
}

我不想从 x.doSomething() 中捕获异常,只捕获构造函数

我想我正在寻找一种方法来分离 x 的声明和初始化。

是否可以在不使用堆分配和指针的情况下完成此操作?

最佳答案

您可以使用 std::optional来自 C++17:

bool foo() {
std::optional<Bar> x; // x contains nothing; no Bar constructed
try {
x.emplace(); // construct Bar (via default constructor)
} catch (const Exception& e) {
return false;
}
x->doSomething(); // call Bar::doSomething() via x (also (*x).doSomething() )
return true;
}

关于c++ - 如何捕获构造函数异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38715378/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com