C++ 学习笔记(16)动态内存开辟new_delete

malloc:

1.自己计算大小。

2.做强制转换。

3.进行开辟成功与否的判断。

4.用free释放

 

new:

1.不需要进行强制转换。

2.不需要判断开辟成功与否。

3.new释放用delete。

4.释放数组,前面要加[]。

#include<iostream>
using namespace std;
#define SIZE 10

void main(){
	int *p = (int*)malloc(sizeof(int) * SIZE);
	if(p == NULL)
		exit(1);
	for(int i  = 0;i < SIZE; ++i){
		p[i] = i+1;
	}
	free(p);

	int *q = new int[SIZE];
	for(int j = 0;j < SIZE; ++j){
		q[j] = j+1;
	}
	delete []q;
}

new允许申请空间的时候初始化。申请数组空间时一定要写成:new int[10];

#include<iostream>
using namespace std;
#define SIZE 10

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

	int *q = new int(10);  //new允许申请空间的时候初始化
	delete q;
}

malloc和new比较。

#include<iostream>
using namespace std;
#define SIZE 10

class Test{
public:
	Test(int d = 0):data(d){
		cout<<"Create Test Object!"<<endl;
	}
	~Test(){
		cout<<"Free Test Object!"<<endl;
	}
public:
	void InitObject(int d = 0){
		data = d;
		cout<<"Init Object!"<<endl;
	}
	void Destroy(){
		cout<<"Destroy Object!"<<endl;
	}
private:
	int data;
};

void Use_Malloc_Free(){
	Test *pt = (Test *)malloc(sizeof(Test));  //只负责对空间申请
	pt->InitObject(10);
	pt->Destroy();  //释放前要摧毁对象,防止内存泄露
	free(pt);
}

void Use_New_Delete(){
	Test *pt = new Test(10);  //先申请空间,再初始化
	delete pt;  //先摧毁对象,再释放空间
}

void main(){
	Use_Malloc_Free();
	cout<<"------------------"<<endl;
	Use_New_Delete();
}

C++一定要记得释放。

#include<iostream>
using namespace std;
#define SIZE 10

class Test{
public:
	Test(int d = 0):data(d){
		cout<<"Create Test Object!"<<endl;
	}
	~Test(){
		cout<<"Free Test Object!"<<endl;
	}
public:
	void InitObject(int d = 0){
		data = d;
		cout<<"Init Object!"<<endl;
	}
	void Destroy(){
		cout<<"Destroy Object!"<<endl;
	}
private:
	int data;
};

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

	Test *pa = new Test[10];
	delete []pa;  //一定要释放数组
}

动态分配数组的3个特点:

1.按运行时所需分配堆空间。

2.释放数组要用delete []pt;

3.没有初始化语句,不能对数组初始化。构造函数有默认值才行。

 

版权声明:本文为博主原创文章,如有错误,恳请大家在评论区指出,在下不胜感激~如要转载注明出处即可~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Wonz

创作不易,一块就行。

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

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

打赏作者

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

抵扣说明:

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

余额充值