构造函数中的内存分配异常

wah*_*hab 12 c++ memory-management

我有一个构造函数,使用new运算符分配几个内存块.

X::X() {
    a = new int[100];
    b = new char[100];
    c = new float[100];
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果分配c失败,并且构造函数抛出异常,将会为内存ab自动被删除?

Bat*_*eba 14

不会自动释放的内存ab点.必须用a明确平衡每一个.new[]delete[]

即使你的析构函数执行了删除(假设a,b并且c是类成员),那么你仍然会泄漏内存.那是因为在这种情况下不会调用析构函数,因为对象无法构造.

使用std::vectors可以避免这些问题.

  • 从技术上讲,`a`和`b`会自动销毁.但是破坏指针并没有做任何事情. (4认同)

Pet*_*ker 9

a,bc将全部被销毁.根据它们的类型,可能会也可能不会释放内存.如果它们是指针,则它们的析构函数不会执行任何操作,并且内存会泄漏.如果它们是某种智能指针,可能是它们的析构函数会释放内存.

  • 技术上正确:最好的正确. (3认同)