《C++ 开辟释放空间》New,delete;malloc,free开辟释放空间基础对比

博客介绍了在堆区开辟空间的相关知识,对比了malloc和new开辟空间的特点。new开辟空间无需强制转换和判空操作,但需区分数组和单个空间,delete释放方式也不同。同时强调delete数组时要加中括号,否则回收不彻底。
#include<iostream>
using namespace std;
#define SIZE 10

//普通变量
/*
开辟空间我们一般在堆区开发,堆区又称为自由存储区

malloc---->free;new----->delete
对于malloc开辟空间来说new开辟空间的优势
1-new开辟空间不用强制转换;
2-new开辟空间不用进行判空操作;
但是malloc开辟空间不用区分开辟的是数组空间和单个空间,然而
new开辟空间需要区分,delete对数组还是单个的空间进行释放的方式不同。
*/

class Test
{
public:
	Test(int d=0):data(d)
	{
		cout<<"Create test object!"<<endl;
	}
	~Test()
	{
		cout<<"Free Test Object!"<<endl;
	}
public:
	void InitiObject()
	{
		//data =0;
		cout<<"Init Object!"<<endl;
	}
	void Destroy()
	{
		cout<<"Destroy Object!"<<endl;
	}
private:
	//char *str;
	int data ;
};

void main()
{
	Test *pt =new Test(100);
	delete pt;

	Test *pa=new Test[10];
	delete []pa;

//注意在这块delete的对象是一个数组,因此一定要加中括号
//若少了[]编译器会认为指向数组第一个元素导致回收不彻底。
//加了之后指向数组的指针,回收整个数组。
}

/*

void Use_Malloc_Free()
{
	Test *pt = (Test*)malloc(sizeof(Test));
	pt->InitiObject();//初始化;
	pt->Destroy();
	free(pt);
}
void Use_New_Delete()
{
	Test *pt= new Test(100);//等价于c语言中先开辟空间 再初始化对象
	delete pt;				//等同于C语言中先摧毁对象 再释放对象
}
void main()
{
	Use_Malloc_Free();
	cout<<"------------------------------"<<endl;
	Use_New_Delete();
}

/*
void main()
{
	int *p=(int*)malloc(sizeof(int));
	*p=10;
	free(p);

	int *q=new int(10);//在这块就体现了c++的高级,对p开辟空间后,同时对其进行初始化操作
	//也就是把这个10放进去,但是malloc则不会对其进行初始化,只是仅仅开辟一个空间;
	delete q;
}
*/
/*
void main()
{
	int *p=(int*)malloc(sizeof(int)*SIZE);
	if(p==NULL)
		exit(1);
	for(int i=0;i<10;++i)
	{
		p[i]=i+1;

	}
	free(p);

	int *q=new int[10];
	for(int j=0;j<10;++j)
	{
		q[j]=j+1;
	}
	delete []q;//该方括号代表此处释放的是一个数组空间;

}
//C语言中开辟空间
void fun(int n)
{
	int *ar=(int*)malloc(sizeof(int)*n);
}
void main()
{
	char ch;
	int n,a;
	cin>>n;
	fun(n);
}
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力做一个code杠精

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值