0
#include <iostream>
#include <string>
using namespace std;

class Base
{
public:
    Base()
    {
        cout << "Base"<<endl;
    }
    ~Base()
    {
        cout << "~Base"<<endl;
    }

};

class Child: public Base
{
public:
    Child()
    {
        cout << "Child"<<endl;
    }
    ~Child()
    {
        cout << "~Child"<<endl;
    }
};

int main()
{
    try
    {
        Child cc;
    }
    catch(...)
    {
    }

    return 0;
}

一般输出将是

Base 
Child
~Child
~Base

但是,如果在 Base 是构造函数时捕获了一些可怕的或异常,那么序列是否可能是:

Base 
~Base
Child
~Child

任何人都可以写一个演示来说明这一点吗?C++ 通常不会在构造函数中抛出异常,但如果是,那么它会导致该输出吗?

感谢大家的帮助。我不确定在通常的代码中是否会发生这种情况。是否有可能在复杂的 Base 构造函数或错误之类的东西中改变通常的输出?如果是这样,谁能给我一个例子?

4

2 回答 2

4

如果您的类构造函数中发生异常,Base则不会调用析构函数。
仅仅因为没有需要销毁的完整对象!

不禁在此引用 Herb

“它不会死,因为它从未活过!”

于 2013-03-28T14:47:41.057 回答
0
include <stdexcept>
Base()
{
    cout << "Base"<<endl;
    throw std::runtime_error("error");
}
于 2013-03-28T14:46:58.327 回答