构造函数出现异常时的行为

char *g_pszTest = NULL;

class B
{
public:
B()
{
cout << "B constructed" << endl;
}

~B()
{
cout << "B destructed" << endl;
}
};


class C
{
public:
C()
{
cout << "C constructed" << endl;
}

~C()
{
cout << "C destructed" << endl;
}
};

class A : public B
{
public:
A()
{
cout << "A constructed" << endl;
g_pszTest = new char[20];
strcpy(g_pszTest, "before throw");
throw 1;
strcpy(g_pszTest, "after throw");
}

~A()
{
cout << "A destructed" << endl;
if (g_pszTest != NULL)
{
cout << g_pszTest << endl;
}
}

private:
C m_c;
};

该段程序代码输出为:
B constructed
C constructed
A constructed
C destructed
B destructed
before throw

1. 构造函数throw之后的代码不会被执行;
2. throw了异常的类的析构函数不会被执行,但throw之前已经构造的对象的析构函数会被正常执行。

发表评论

您的电子邮箱地址不会被公开。