私はクラスA
を持っていて、そのコンストラクタにはnew
を使ってメモリを割り当てています。 A
のチャンクを割り当てて(が1つのA
を初期化している間に)1つがstd::bad_alloc
をコンストラクタにスローするとどうなりますか?演算子newは例外の後に初期化されたオブジェクトを破棄しますか?
operator new[]
はすでに初期化されたオブジェクトを破棄しますか? コンストラクタがスローしないようにするのは私の義務ですか?
EDIT:新しいの2つの呼び出しが混乱に聞こえるかもしれないので、ここで明確にするコードの一部です:
class A
{
int* mem;
public:
A()
{
try
{
mem = new int[3];
}
catch(bad_alloc&)
{
throw 5;
}
}
~A()
{
delete[] mem;
}
}
A* list = 0;
try
{
list = new A[50000];
}
catch(int)
{
// When I get here, did the new[] above call the destructors
// of all the objects it managed to construct before one of them threw?
}
私はいくつかのコードを追加しました。 – pezcode
はい、ありがとうございます。短い答えは「はい」ですが、私の答えを編集しました。 –