gpt4 book ai didi

c++ - 在这个简单的例子中安全地调用 new 的最佳方法是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:30:51 25 4
gpt4 key购买 nike

对于一个学校项目,我有 3 个类:鸡蛋、巢和母鸡。我们需要使用 newmain 中创建每个的实例,对每个调用 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;

}

我想将整个 block 从第一个 new 到最后一个 delete 包装在一个 try block 中,然后只捕获一个 bad_alloc,并在每个实例上调用delete,但后来我想到了以下场景:

  • egg创建成功
  • nest 失败,并抛出一个 bad_alloc

如果此时我在所有 3 个上调用 delete,hen 应该抛出另一个异常,因为它从来没有在一开始就被分配,所以它不能被释放。

我知道理想情况下,您不会像这样公开使用 new,但是处理这种情况的最佳方法是什么?是否太琐碎和人为而无法妥善处理?

最佳答案

你可以这样做

  1. 首先声明它们。设置为 nullptr
  2. 启动try block
  3. 分配。
  4. 捕获 - 删除它们 - 删除 nullprt 是一个 noop

关于c++ - 在这个简单的例子中安全地调用 new 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29196645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com