从堆栈和堆中释放内存

Deallocating memory from stack and heap

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

下面的代码打印了 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;
}

但是,如果我动态声明 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 [] myBoxArray; // Delete array

有未定义的行为 (UB),任何事情都可能发生,也可能什么都没有。

你只能delete你做过new的事情,你只能delete[]你做过new[]的事情。任何违反此规则的行为都会导致程序运行异常。