内存管理+模板初阶

一,内存管理

我们在c语言学习了动态开辟内存:mallc;realloc,free这样的函数;而cpp加入了新的操作符,new,delete。

1.1new和delete

我们之前说过,cpp关注的是自定义类型,所以出现这两个操作符的原因就是解决C语言中malloc不方便解决动态申请自定义类型对象初始化的问题。
new的本质就是:开空间+默认构造函数初始化;
delete的本质则是:析构函数+释放空间。

1.2语法规范

	//动态申请一个int的空间
	int* ptr1 = new int;
	//动态申请一个int的空间并初始化为1000
	int* ptr2 = new int(1000);
	//动态申请十个int类型的空间
	int* ptr3 = new int[10] {1,2,3,4,5};
	delete ptr1;
	delete ptr2;
	delete []ptr1;

在这里插入图片描述

new和delete的语法规范十分的便于记忆,但是注意符号一定要配对申请的数组释放的时候一定是释放数组的类型,不然编译的时候就会报错。

补充

刚开始我们认识delete的时候可能会有些疑惑析构函数+释放空间感觉好像两个的功能是一样。接下来我们用图来解释。
在这里插入图片描述
这里的_a是指针,它本身就有空间,而他又在stack类中,那么我们的delete就先调用析构函数先释放_a的内容,然后释放stack的空间。

重点(malloc/free和new/delete的区别和联系)

在这里插入图片描述

二,模板初阶

2.1泛型编程

我们先了解一个概念泛型编程
泛型编程:编写与类型无关的代码,是代码复用的一种常用手段。模板是泛型编成的基础。这样的概念不是很好理解我们用代码来进一步理解。

//实现交换函数
void Swap(int& left, int& right)
{
	int temp = left;
	left = right;
	right = temp;
}
void Swap(double& left, double& right)
{
	double temp = left;
	left = right;
	right = temp;
}
void Swap(char& left, char& right)
{
	char temp = left;
	left = right;
	right = temp;
}

一个交换函数,代码里面不一样的只有类型。这样的函数我们一般用参数模板来实现。

2.2模板函数

template<typename T>
void Swap(T& left, T& right)
{
	T temp = left;
	left = right;
	right = temp;
}

模板函数:模板函数代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定版本。

2.3函数模板格式

在这里插入图片描述

2.4类模板

和函数模板一样,类模板是一个类家族
在这里插入图片描述
这里要注意:在写类模板的时候不允许声明和定义分离。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

tpoog

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

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

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

打赏作者

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

抵扣说明:

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

余额充值