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

Raf*_*afa 1 c++ constructor exception bad-alloc

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???
   }
} 
Run Code Online (Sandbox Code Playgroud)

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

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

Pau*_*ans 6

你想使用智能指针:

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

public:
    Object() : a(make_unique<A>()), b(make_unique<B>()) {}
}
Run Code Online (Sandbox Code Playgroud)