如何释放为已知大小的数组存储的内存?
下面的代码打印4次“构造函数调用!”但只有一次“Destructor叫!”这是否意味着整个数组的内存已被释放?
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;
}
是否需要解除分配非动态分配的内存或更好地将其留给垃圾收集器?
答案 0 :(得分:8)
这不是有点的问题。你根本无法释放你没有分配的记忆。
delete [] myBoxArray; // Delete array
有未定义的行为(UB),任何事情都可能发生。
您只能delete
您执行的new
内容,而delete[]
只能new[]
您执行// Draw faint arcs for each day (weekends filled, else outlined).
vis.selectAll("g.AllDays")
.data(dates)
.enter().append("svg:g")
.attr("class", "AllDays")
.attr("transform", "translate(" + r1 + "," + r1 + ")")
.append("svg:path")
.attr("stroke", function(d, i) { return d3.hsl(0,0.25,0.75) })
.attr("fill", function(d, i) {
return (d.getDay()==5||d.getDay()==6)?"#cccccc":"#ffffff";
})
.attr("d", arc)
;
的内容。任何违反此规则的行为都会导致程序行为异常。