C++中delete和delete[]的区别
2015-11-04 10:03
302 查看
一个简单的使用原则就是:new 和 delete、new[] 和 delete[] 对应使用。
C++回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]。
关于 new[] 和 delete[],其中又分为两种情况:(1) 为基本数据类型分配和回收空间;(2) 为自定义类型分配和回收空间。
大家可以自己运行这个程序,看一看 delete p1 和 delete[] p1 的不同结果,我就不在这里贴运行结果了。
从运行结果中我们可以看出,delete p1 在回收空间的过程中,只有 p1[0] 这个对象调用了析构函数,其它对象如 p1[1]、p1[2] 等都没有调用自身的析构函数,这就是问题的症结所在。如果用 delete[],则在回收空间之前所有对象都会首先调用自己的析构函数。
基本类型的对象没有析构函数,所以回收基本类型组成的数组空间用 delete 和 delete[] 都是应该可以的;但是对于类对象数组,只能用 delete[]。对于 new 的单个对象,只能用 delete 不能用 delete[] 回收空间。
所以一个简单的使用原则就是:new 和 delete、new[] 和 delete[] 对应使用。
另外参考: http://blog.163.com/tsing_best/blog/static/1111530220121302856721/
C++回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]。
关于 new[] 和 delete[],其中又分为两种情况:(1) 为基本数据类型分配和回收空间;(2) 为自定义类型分配和回收空间。
大家可以自己运行这个程序,看一看 delete p1 和 delete[] p1 的不同结果,我就不在这里贴运行结果了。
从运行结果中我们可以看出,delete p1 在回收空间的过程中,只有 p1[0] 这个对象调用了析构函数,其它对象如 p1[1]、p1[2] 等都没有调用自身的析构函数,这就是问题的症结所在。如果用 delete[],则在回收空间之前所有对象都会首先调用自己的析构函数。
基本类型的对象没有析构函数,所以回收基本类型组成的数组空间用 delete 和 delete[] 都是应该可以的;但是对于类对象数组,只能用 delete[]。对于 new 的单个对象,只能用 delete 不能用 delete[] 回收空间。
所以一个简单的使用原则就是:new 和 delete、new[] 和 delete[] 对应使用。
另外参考: http://blog.163.com/tsing_best/blog/static/1111530220121302856721/
相关文章推荐
- 在VS2010上使用C#调用非托管C++生成的DLL文件(图文讲解)
- 类型转换导致的问题
- C# 调用 C++ dll (类型对照)
- Effective C++笔记(六)
- nullptr----C++11
- more efficitive c++(prefix postfix and operator new)
- c/c++中的预编译指令总结
- VC++ 对话框程序响应键盘消息的处理方法的说明(非常重要)
- 搭建C语言开发环境(Windows平台)汇总
- C/C++高阶语法:函数指针及其应用,回调函数
- ——黑马程序员——C语言中构造类型—结构体(二)
- c++ read
- 在Windows平台搭建C语言开发环境的多种方式
- C++除法实现方式及负数取模
- 对字符串中的字符进行统计
- c++11特性之std::thread--进阶二
- c++11特性之std::thread--进阶二
- leetcode笔记:House Robber II
- 高质量程序设计指南C++/c语言 第四章
- [转]VC++中CTime类Format参数详解