现在新闻做的最好的网站,互联网行业有哪些,一般用什么语言做网站,软件开发工具的范围是什么目录 一、new
1.1什么是new#xff1f;
1.2为什么要有new#xff1f;
1.3使用new
1.4 new的超级好处 二、delete
2.1什么是delete#xff1f;
2.2为什么要有delete#xff1f;
2.3使用delete
三、 malloc / free和new / delete的共同点和区别
四、浅谈模板
4.1什…目录 一、new
1.1什么是new
1.2为什么要有new
1.3使用new
1.4 new的超级好处 二、delete
2.1什么是delete
2.2为什么要有delete
2.3使用delete
三、 malloc / free和new / delete的共同点和区别
四、浅谈模板
4.1什么是模板
4.2函数模板的使用
4.3变量实例化 4.4类模板 一、new
1.1什么是new
C在堆上开空间的操作为new可以看作是C语言的malloc
1.2为什么要有new 既然有了C语言的malloc那么为什么C又要搞个new出来呢功能不都一样吗之所以要搞个new出来主要的原因还是自定义类型的定义在C语言中我们要用malloc创建一个自定义类型的空间不仅要用到强转还得用到sizeof。非常的不方便而new便可以解决这些不方便的地方 1.3使用new
使用new开辟空间有以下两种方式 1.new类型 如new int便是直接开辟一个int大小的空间 2.new 类型[n] 如new int[10]开辟10个int大小的空间 初始化也有两种方式 1.new int(n) 如new int(10)是开辟一个int大小的空间并将其初始化为10 2.new int[数字]{数个初始化变量} 如 new int[10]{123}是开辟十个int大小的空间并将前三个区块初始化为123而没被初始化的区块则会被默认为0 通过监视窗口可以验证上述几点 1.4 new的超级好处
前面我们说过new可以针对自定义类型接下来就让我们来试一下 不难看出使用C语言的malloc来开辟空间不仅代码不简洁而且还没法初始化而C的new不仅可以开辟空间而且可以通过类的构造函数对对象进行初始化一步到位。 这时候就有小伙伴问了你这个初始化只初始化一个变量的类不是很捞吗其实多个变量一样可以初始化使用()中间加逗号作为分隔 二、delete
2.1什么是delete
可等价为C语言中的free用来释放在堆上开辟的空间的
2.2为什么要有delete
为了和new配套使用同样也是为了处理自定义类型delete的超级好处便是自定义类型走完它的生命周期后会走它的析构函数对变量进行处理
2.3使用delete 1.用new类型 这种方式创建出来的空间直接delete空间首地址即可 2.用new类型[n] 这种方式创建出来的空间得delete[]空间首地址 不匹配使用的话程序可能会崩溃
可以看出delete会调用对应类的析构函数 三、 malloc / free和new / delete的共同点和区别 malloc / free和new / delete的共同点是都是从堆上申请空间并且需要用户手动释放。不同的地 方是 1. malloc和free是函数new和delete是操作符 2. malloc申请的空间不会初始化new可以初始化 3. malloc申请空间时需要手动计算空间大小并传递new只需在其后跟上空间的类型即可 如果是多个对象[]中指定对象个数即可 4. malloc的返回值为void*, 在使用时必须强转new不需要因为new后跟的是空间的类型 5. malloc申请空间失败时返回的是NULL因此使用时必须判空new不需要但是new需 要捕获异常 6. 申请自定义类型对象时malloc / free只会开辟空间不会调用构造函数与析构函数而new 在申请空间后会调用构造函数完成对象的初始化delete在释放空间前会调用析构函数完成 空间中资源的清理 四、浅谈模板
4.1什么是模板 在生活中我们常常能遇到什么万用作文模板用固定的句式加上几个词汇的那种大家应该都见过而我接下来我们谈的模板也和这个有异曲同工之处都是套一套固定的模式。模板分为函数模板和类模板这两种模板。 4.2函数模板的使用
函数模板其实就是在函数的前面加上一行templatetypename 变量其中typename可以拿class来代替它们二者有一点小区别之后我们会谈到现在就把它俩看作等价的即可 在生活中我们经常会使用到交换函数但是交换函数往往会涉及到不同的变量这就令人沮丧因为这意味着我们得根据不同的变量来因地制宜地写函数而模板的出现便杜绝了这一情况一个swap便可以代表所有 4.3变量实例化
在函数名和参数中间写类型为显示实例化如此不需要编译器来推理类型直接就出来了
如下 4.4类模板 类模板实例化与函数模板实例化不同类模板实例化需要在类模板名字后跟然后将实例化的类型放在中即可类模板名字不是真正的类而实例化的结果才是真正的类因此不难看出它的用途以前我们写栈得搞个typedef int StackType 现在不再需要直接上就能够有所有类型的栈