对于一个学校项目,我有 3 个班级:鸡蛋、巢和母鸡。我们需要使用new
创建每个 in 的实例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
块中,然后只捕获 abad_alloc
并调用delete
每个实例,但后来我想到了以下场景:
egg
已成功创建nest
失败,并抛出一个bad_alloc
如果此时我对所有 3 个都调用 delete,hen
应该抛出另一个异常,因为它从来没有被分配过,所以它不能被释放。
我知道理想情况下,您不会new
像这样在公开场合使用,但是处理这种情况的最佳方法是什么?是不是太琐碎太做作而不能妥善处理?