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失败,并且构造函数抛出异常,将会为内存a和b自动被删除?
Bat*_*eba 14
不会自动释放的内存a和b点.必须用a明确平衡每一个.new[]delete[]
即使你的析构函数执行了删除(假设a,b并且c是类成员),那么你仍然会泄漏内存.那是因为在这种情况下不会调用析构函数,因为对象无法构造.
使用std::vectors可以避免这些问题.
a,b和c将全部被销毁.根据它们的类型,可能会也可能不会释放内存.如果它们是指针,则它们的析构函数不会执行任何操作,并且内存会泄漏.如果它们是某种智能指针,可能是它们的析构函数会释放内存.