【发布时间】:2016-08-02 08:26:43
【问题描述】:
我有一个 C++ 类,它在失败时从构造函数中抛出异常。如何分配此类的本地实例(不使用new)并处理任何可能的异常,同时保持try 块范围尽可能小?
基本上,我正在寻找以下 Java 习语的 C++ 等价物:
boolean foo() {
Bar x;
try {
x = new Bar();
} catch (Exception e) {
return false;
}
x.doSomething();
return true;
}
我不想捕获来自x.doSomething() 的异常,只有构造函数。
我想我正在寻找一种将x 的声明和初始化分开的方法。
是否可以在不使用堆分配和指针的情况下完成此操作?
【问题讨论】:
-
是的。将所有内容放在 try 块内的成功路径上。您将留在函数范围内。
-
@StoryTeller 如果我不想从例如捕获异常怎么办?
x.doSomething(),只有构造函数的异常? -
@AndrewSun 使用不同的异常,或将
x.doSomething()放入内部异常块中。 -
C++ 异常非常昂贵(对于 c++ 速度迷而言)。与 Java 不同,你不应该一开始就随意扔掉它们。如果你已经这样做了,那就重新设计你的异常层次结构并从
x.doSomething();重新抛出东西 -
您知道要捕获什么异常吗?内存分配可能会失败并且构造函数代码可能会失败...
标签: c++ constructor exception-handling