从堆栈和堆中释放内存

Akk*_*rek 2 c++ constructor destructor allocation

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

下面的代码打印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;
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我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;
}
Run Code Online (Sandbox Code Playgroud)

是否有一点解除分配非动态分配的内存或更好地将其留给垃圾收集器?

Ser*_*eyA 8

这不是有问题的问题.你根本无法释放你没有分配的内存.

delete [] myBoxArray; // Delete array
Run Code Online (Sandbox Code Playgroud)

有未定义的行为(UB),任何事情都可能发生.

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

  • 你打败了我2秒:). (2认同)