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
原创粉丝点击