学校のプロジェクトでは、卵、巣、鶏の 3 つのクラスがあります。を使用newして each のインスタンスを作成し、each をmain呼び出しdisplay()てから、明示的にそれぞれを削除する必要があります。それはすべて簡単です。
bad_alloc私の問題は、 ;を適切にキャッチする方法がわからないことです。newいずれかの呼び出しで 1 をスローする必要があります。
現在、次のようになっています。
int main(int argc, char* argv[]) {
using namespace std;
cout << "Creating new instances on the heap..." << endl;
Egg* egg = new Egg("New Egg");
Nest* nest = new Nest("New Nest");
Hen* hen = new Hen("New Hen");
cout << sizeof(*egg) << endl;
cout << sizeof(*nest) << endl;
cout << sizeof(*hen) << endl;
cout << "\nCalling display() on each..." << endl;
egg->display();
nest->display();
hen->display();
cout << "\nExplicitly deleting each instance..." << endl;
delete egg;
delete nest;
delete hen;
cout << "\nDone" << endl;
}
newブロックの最初から最後までdeleteブロック全体をラップし、try, をキャッチして各インスタンスbad_allocを呼び出すdeleteことを考えましたが、次のシナリオを考えました。
egg正常に作成されましたnest失敗し、bad_alloc
この時点で 3 つすべてに対して delete を呼び出すとhen、そもそも割り当てられていないため、別の例外がスローされるはずです。したがって、解放することはできません。
理想的には、newこのようにオープンに使用しないことはわかっていますが、この状況を処理する最善の方法は何ですか? 適切に処理するにはあまりにも些細で人工的すぎますか?