【发布时间】:2016-07-25 21:41:58
【问题描述】:
如何释放为已知大小的数组存储的内存?
下面的代码打印了 4 次“构造函数调用!”但只有一次“调用了析构函数!”是否意味着整个数组的内存都被释放了?
class Box
{
public:
Box() {
cout << "Constructor called!" <<endl;
}
~Box() {
cout << "Destructor called!" <<endl;
}
};
int main( )
{
Box myBoxArray[4];
delete myBoxArray; // Delete array
return 0;
}
但是如果我动态声明myBoxArray,如下代码所示,析构函数被调用了4次。
class Box
{
public:
Box() {
cout << "Constructor called!" <<endl;
}
~Box() {
cout << "Destructor called!" <<endl;
}
};
int main( )
{
Box* myBoxArray = new Box[4];
delete [] myBoxArray; // Delete array
return 0;
}
是否有必要解除分配非动态分配的内存,或者最好将其留给垃圾收集器?
【问题讨论】:
-
您的第一个示例显示了未定义的行为。你不能打电话给
delete以前不是newed 的东西。 -
c++中没有垃圾收集器
标签: c++ constructor destructor allocation