delete 和 delete[]
来源:互联网 发布:腾讯软件中心 mac 编辑:程序博客网 时间:2024/04/29 02:46
C++ 中我们常用new-delete来分配和释放资源,而new一个对象或者一个对象数组都是允许的。
动态创建对象只需要指定其数据类型和数据长度,不必为改对象命名。动态创建完的对象我们应该显示地销毁改对象,释放其占用的内存。由此我们将用到delete 或者delete来销毁对象。
关于对象销毁又分为两种情况:一是为基本数据类型分配和释放资源,一是为自定义对象分配和释放资源。
(1)针对基本数据类型
int* a = new int[10];
delete a;
delete[] a;
这两种方式释放的效果一样。分配简单类型内存时,内存大小已经确定,系统可以记忆并且进行管理,在析构时,系统并不会调用析构函数。(参考网上博客分析).
(2)针对自定义对象
通过调用类对象的析构函数释放用户分配的空间。
// DemoDelete.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>using namespace std;class Temp{public:Temp(){cout<<"gouzao"<<endl;}~Temp(){cout<<"xigou"<<endl;}};int _tmain(int argc, _TCHAR* argv[]){int* a = new int[10];//delete a;//OKdelete[] a;//OKTemp* arrayTemp = new Temp[5];cout<<"arraytemp: "<<arrayTemp<<endl;delete[] arrayTemp;cout<<"******************"<<endl;Temp* arrayTemp2 = new Temp[5];cout<<"arraytemp2: "<<arrayTemp2<<endl;delete arrayTemp2;system("pause");return 0;}运行 结果:
通过结果可以看到:在自定义对象上delete 和delete[] 的区别。delete arrayTemp在回收空间的过程中,只有arrayTemp[0] 这个对象调用了其析构函数,其它对象如arrayTemp[1]、arrayTemp[2] 等都没有调用自身的析构函数。所以资源并没有释放完。而delete[]则保证了所有对象都调用了析构函数进行资源的释放。
0 0
- delete 和delete[]
- delete[] 和 delete
- C++ delete和delete[]
- delete和delete[]区别
- C ++ delete 和delete[]
- C++ delete和delete[]
- C++ delete和delete[]
- delete和delete[]区别
- C++ delete和delete[]
- delete和delete[]
- delete 和delete[]区别
- delete 和delete[]区别
- delete和delete[]
- delete和delete[]陷阱
- delete 和 delete [] 区别
- delete 和 delete[]
- C++ delete和delete[]
- delete 和 delete []
- Ds18b20课程设计
- 自定义Delphi XE开发的移动端程序启动闪屏Splash功能(转)
- service 保活 保证不被杀死
- POJ 1703 Find them, Catch them
- 清除浮动的三种方式
- delete 和 delete[]
- Web网站的几个并发量级
- Android学习笔记9
- Leetcode 13 Roman to Integer
- 【Spark】RDD操作详解3——键值型Transformation算子
- WebRTC之noise suppression算法
- 浅谈C/C++内存泄露及其检测工具
- fastjson带子集的json
- LeetCode #25 Reverse Nodes in k-Group