构造函数不引发异常

Constructor not throwing exception

本文关键字:异常 构造函数      更新时间:2023-10-16

在下面的代码中,我想测试如果我有一个对象,该对象包含另一个构造函数引发异常的对象。但是下面的代码绝对没有任何作用。根本没有打印在控制台上。

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;
    }
}

如果在尝试块中,我会使用注释的代码,然后显示正常。

我也尝试做

B b(A(), C());

仍然什么都没有。

这是一个函数声明,带有返回类型 B,name b和两个类型AC的未命名参数:

B b(A, C);

相同
B b(A(), C());

作为名称可以由括号(允许分组,在使用函数指针等工作时必不可少),甚至被排除在外的名称都可以由括号包裹。您可以通过

将其变成B类型的可变b
B b(A{}, C{});

在这种情况下,卷曲牙套初始化变量初始化变量的动机之一就是消除歧义。在这里,它显然很方便。