在C ++中删除动态分配的类实例?

时间:2017-10-12 20:47:13

标签: c++ delete-operator

在C ++中,我有一个A类,第二个B包含一个已分配的A数组。从B中删除A实例的正确语法是什么?

class A
{
  ~A() {/*delete members of A which were dynamically allocated*/}
  //...members...
};

class B
{
  A *arrayOfA; // allocated by arrayOfA=new A[123];
};

这是我试过的,删除A的第i个实例:

// Code to delete an instance of A from B:
// delete arrayofA[i]; // gives a compilation error, because delete requires a pointer
delete &arrayofA[i]; // compiles, but gives a runtime error

正在调用A的析构函数,似乎正常运行。在验证A的内存块时发生错误(这是一个调试版本)。可能错误是由覆盖堆分配引起的,但我想确保C ++语法对于我想要做的事情是正确的。

64位Windows 7; Visual Studio 2017 v15.3.5

1 个答案:

答案 0 :(得分:0)

应使用new删除分配有delete的对象,并使用new[]删除分配有delete[]的对象。任何其他排列都会导致未定义的行为,也可能导致不良事件发生。

A * a = new A();
delete a;
A * b = new A[10];
delete[] b;
A * c = new A[50];
delete c; //UB!!!!
相关问题