C++ 从堆栈和堆中释放内存
如何释放为已知大小的数组存储的内存 下面的代码打印了4次“constructor called!”,但只有一次“Destructor called!”,这是否意味着整个数组的内存已被释放C++ 从堆栈和堆中释放内存,c++,constructor,destructor,allocation,C++,Constructor,Destructor,Allocation,如何释放为已知大小的数组存储的内存 下面的代码打印了4次“constructor called!”,但只有一次“Destructor called!”,这是否意味着整个数组的内存已被释放 class Box { public: Box() { cout << "Constructor called!" <<endl; } ~Box() { cout << "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;
}
是否需要取消分配非动态分配的内存,或者最好将其留给垃圾收集器?这不是有点的问题。您无法释放未分配的内存
delete [] myBoxArray; // Delete array
具有未定义的行为(UB),任何事情或任何事情都可能发生
您只能
删除您所做的新建的,并且只能删除[]
您所做的新建的[]
。任何违反此规则的行为都会导致程序行为不当。您的第一个示例显示未定义的行为。你不能调用delete
来删除以前没有new
ed的东西。c++中没有垃圾收集器,你比我快了2秒:)。有没有办法从内存中删除不是用new
创建的aray/变量?@AkkaJaworek:当执行退出声明的块时,它们会自动删除在@AkkaJaworek中,编译器负责此操作。它是自动的,所以你不必考虑它。那么全局变量呢?
delete [] myBoxArray; // Delete array