一、尽量配套使用

申请释放
mallocfree
new()delete
new[]delete[]

二、原因

我们举例说明:

1
2
3
4
5
6
7
8
class Test
{
private:
int num;
public:
Test(int x = 0): num(x){}
~Test(){}
};

(1)申请一个Test()

Test* tp = new Test();
内存模型
在这里插入图片描述
结论:

  1. 可以使用delete tp;
  2. 可以free(tp),但是不适用自定义类型(未调用析构函数)
  3. 不可以delete[],将上越界标记识别成对象个数,导致崩溃

(2)申请一组Test[10]

Test* array = new Test[10];

内存模型:
在这里插入图片描述
结论:

  1. 不可以free,将对象个数当作上越界标记,导致崩溃
  2. 不可以delete,将对象个数当作上越界标记,导致崩溃
  3. 可以delete[],正确识别对象个数,正确识别上越界标记