コンストラクターを持つクラスがあるとしましょう:
class MyClass
{
public:
MyClass()
{
//our code goes here
throw "OMG";//well, some code that throws an exception
}
};
現在、例外が発生すると、スタックの巻き戻しが実行されます。また、コンストラクタから例外がスローされた場合、オブジェクトが最初から完全に「作成」されたことがないため、対応するオブジェクトのデストラクタが呼び出されないことも知っています。
私はこれに少し混乱しています。私にとって、これは、コンストラクターが終了したときにのみオブジェクトが「作成された」と見なされることを意味します。ただし、コンストラクター内でオブジェクトのメンバーを操作できるため、コンストラクターが呼び出される前(または直後)のどこかにすべてのメモリーが割り当てられることは明らかです。
では、オブジェクトがメモリ内に作成されるのはいつですか。また、例外の原因となったオブジェクトのメモリはどうなりますか?