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::vector
s可以避免这些问题.
a
,b
和c
将全部被销毁.根据它们的类型,可能会也可能不会释放内存.如果它们是指针,则它们的析构函数不会执行任何操作,并且内存会泄漏.如果它们是某种智能指针,可能是它们的析构函数会释放内存.
归档时间: |
|
查看次数: |
973 次 |
最近记录: |