【C++】free delete delete[]注意事项
一、尽量配套使用
申请 | 释放 |
---|---|
malloc | free |
new() | delete |
new[] | delete[] |
二、原因
我们举例说明:
1 | class Test |
(1)申请一个Test()
Test* tp = new Test();
内存模型
结论:
- 可以使用delete tp;
- 可以free(tp),但是不适用自定义类型(未调用析构函数)
- 不可以delete[],将上越界标记识别成对象个数,导致崩溃
(2)申请一组Test[10]
Test* array = new Test[10];
内存模型:
结论:
- 不可以free,将对象个数当作上越界标记,导致崩溃
- 不可以delete,将对象个数当作上越界标记,导致崩溃
- 可以delete[],正确识别对象个数,正确识别上越界标记
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 code-016!