をどのように機能するかをオペレータに新しい、私は単純なコードを持っている:C++、これは例えば、内部
class B
{
};
class A
{
B b;
public:
A()
{
throw 1;
}
};
int main()
{
A* a = 0;
try
{
a = new A;
}
catch (int)
{
}
}
コンストラクタAは、デストラクタが呼び出されることはありません、例外がスローされます。しかし、Bのデストラクタが呼び出されます。ヒープ内のメモリは割り当てられません。私の質問は内部的にどのように動作するのですか?最初になるもの:Aを構築するか、ヒープにメモリを割り当てるか?したがって、割り当てが最初の場合、例外がある場合、どのように割り当て解除が処理されますか?その他、Aを構築するのが最初の場合、ヒープにどのようにコピペしますか?
ありがとうございます、あなたのコメントはいいですが、私はより多くの情報が必要です。スタックのようなヒープメモリ内のデストラクタの動作を提供するメカニズムは何ですか? – M90
@ M90、私はメカニズムが実装固有のものだと思います。私が言ったように、目に見えない 'try-finally'ブロック。同様に、何かがうまくいかない場合、コントロールは必要な処理が必要なものを処理する自動生成コードに転送され、次に伝播の例外が続きます。あなたが興味をそそられていれば、あなたのコードをアセンブリにコンパイルして*本当に*動作するかどうかを確認してください。 –
@ M90も参照してください。Herb Sutterの[Constructor Failures ...](http://www.gotw.ca/publications/mill13。htm) –