下面的代码会导致资源泄漏吗?

will following code cause resource leak?

本文关键字:资源 泄漏 代码      更新时间:2023-10-16
class Base {
public:
    Base(int i1, int i2): ip1{new int(i1)}{
        try {
            ip2 = new int(i2);
        } catch (std::bad_alloc& ){
            delete ip1;
        }
    }
    ~Base() { delete ip1; delete ip2; }
private:
    int *ip1, *ip2;
};
class Derived: public Base {
public:
    Derived(int i1, int i2, int i3): Base(i1, i2), ip3(new int(i3)) {}
    ~Derived() { delete ip3; }
private:
    int *ip3;
};
在派生构造函数中不使用try-catch。我想知道如果ip3(new int(i3))抛出异常,ip1和ip2分配的内存是否会被删除?

是的,但是您可以通过使用unique_ptrmake_unique来实现同样的事情。