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クラス コンストラクターで例外が発生した場合、デストラクターは呼び出されません。
破棄する必要がある完全なオブジェクトがないという理由だけで!

これについてハーブを引用せずにはいられません:

「それは生きていないので、死ぬことはできません!」

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