C++ 从堆栈和堆中释放内存

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

如何释放为已知大小的数组存储的内存

下面的代码打印了4次“constructor called!”,但只有一次“Destructor called!”,这是否意味着整个数组的内存已被释放

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