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创建的对象(因为它在栈中),它的析构函数是自动调用的吗?
你想使用智能指针:
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)
| 归档时间: |
|
| 查看次数: |
1283 次 |
| 最近记录: |