delete 和 delete[]

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;//OK
	delete[] a;//OK
	Temp* 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[]则保证了所有对象都调用了析构函数进行资源的释放。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值