【发布时间】:2019-07-11 14:41:40
【问题描述】:
在下面的代码中,我想测试如果我有一个对象会发生什么,该对象包含另一个构造函数抛出异常的对象。但是下面的代码完全没有任何作用。控制台上根本没有打印任何内容。
class A
{
public:
A()
{
cout << "in A constructor" << endl;
throw "error creating A";
}
~A()
{
cout << "destructing A" << endl;
}
};
class C
{
public:
C()
{
cout <<"in C constructor" << endl;
}
~C()
{
cout << "in C destructor " << endl;
}
};
class B
{
public:
C c;
A a;
B(A a_, C c_): a(a_), c(c_){}
B(){}
};
int main()
{
try{
B b(A, C);
//B b;
}
catch(char const* s)
{
cout <<"catching" << endl;
}
}
如果在 try 块中,我使用注释代码代替,那么它显示正常。
我也试过了
B b(A(), C());
还是什么都没有。
【问题讨论】:
-
欢迎来到the most vexing parse 的世界。您展示的两次尝试都是声明函数。
标签: c++ exception constructor most-vexing-parse