gpt4 book ai didi

在构造函数中抛出 C++ bad_alloc

转载 作者:太空宇宙 更新时间:2023-11-03 10:28:20 27 4
gpt4 key购买 nike

当构造函数中抛出bad_alloc异常时,其中创建了多个对象,必须做些什么来清理内存。例如。

class Object
{
private:
A * a;
B * b;

public:

Object()
{
a= new A();
b= new B(); //So if a bad_alloc is called here, how is a deleted???
}
}

我的直觉是将对 new 的每次调用放在一个单独的 try catch block 中,并删除之前调用过 new 的所有对象,但这太冗长了(第一个 try block 没有调用析构函数,第二类是第一类,第三类是前两类,等等)。我的问题是:处理这个问题最常见的方法是什么?

另外,假设类对象包含一个不是用 new 创建的对象(因为它在堆栈上),它的析构函数是否被自动调用?

最佳答案

你想使用智能指针:

class Object {
std::unique_ptr<A> a;
std::unique_ptr<B> b;

public:
Object() : a(make_unique<A>()), b(make_unique<B>()) {}
}

关于在构造函数中抛出 C++ bad_alloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25918240/

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