我遇到了一个问题。我有这个:
int main()
{
try
{
Class A obj;
}
catch()
{
...
}
}
class B
{
public:
B(){throw an exception there from .cpp};
~B();
};
class A
{
public:
A();
~A();
private:
B objB{} // <=== Exception from there, how can I catch it ?
}
正如您所看到的,当我从头文件初始化带有大括号的对象时,我不知道如何获得异常。
谢谢:)
答案 0 :(得分:1)
这个live example演示了函数级try
块的技术。
A()
try {
/* code */
} catch( exception e ) {
throw e;
}
但是,请注意,如果上述构造捕获了某些内容,必须抛出异常。它不一定是同一个例外。这是因为A
的构造失败了(异常绕过了A
的部分构造,和/或A
的某个子对象的构造函数被终止了),这是唯一的方法退出构造失败的构造函数是通过throw
。
答案 1 :(得分:0)
我认为这是不可能的。实际上,它与Avoid calling constructor of member variable非常相似,并且会使objB
的{{1}}成员无法构建。解决方案是分两步拆分A
的构造函数:
B
方法。您可以将大括号传递给该方法。 initialize
检查是否已正确初始化。