ローカル静的オブジェクトのコンストラクタからスローされた例外をどのように扱うべきですか?例えば、私は、次のコードた:私は理解するようローカル静的オブジェクトと例外
class A
{
public:
A() {throw runtime_error("Ooops");}
};
void foo()
{
static A a = A();
cout << "Continue" << endl;
}
int main(void)
{
try
{
foo();
}
catch(...)
{
}
foo(); // Prints continue
return 0;
}
を、第二foo
メソッドを呼び出した場合には、オブジェクトa
は完全に構築されたオブジェクトとして扱われ、コンストラクタが呼び出されません。 (それ以上の場合は、a
のデストラクタのように見えます)
いいえ、ご理解いただけません。あなたはこれを自明に試すことができました(https://wandbox.org/permlink/0zqV3BglWpVZSgRM)。 –
例外をスローし、コンストラクタの実行を終了した場合(オブジェクトの構築を完了しなかった場合)、 'a'が完全に構築されることをどのように期待しますか? – Rogus
'static A a = A();'なぜこれをやったのですか?なぜコピーを初期化するのですか? –