C++的new和delete
一、C与C++的内存管理以及分配
在C语言中的内存管理是通过函数区申请分配内存的: link ;而在C++中则是通过new和delete两个关键字区堆区申请及释放空间的。
二、C++中的new和delete
1、new/new[]和delete/delete[]的用法
new在申请空间后返回空间的地址,并且可以对这块空间进行初始化,如果没有初始化就是一个随机值。
new[] 会申请一个数组,new[]会申请一个数组,[]中需要确定数组的长度
new出来的数组也是可以初始化的,后面加(),就代表全部元素初始化为0
如果需要对new出来的数组,中的元素初始化为自己想要的值就需要用{},
需要注意的是,初始化的元素量不能超过总元素的和,剩下没有初始化的元素会:
对于内置类型就初始化为0,对于自定义类型会调用构造函数走初始化列表
在new完一块空间后,要是不对这块空间进行清理就会造成内存泄漏,所以在使用new和new[]后,需要与delete和delete[],搭配使用,以免造成内存泄漏。
2、new和delete对于内置类型和自定义类型的区别
对于内置类型来说,new就是正常的开辟一个空间,delete也就是对这个空间进行清理;主要是在对自定义类型上,new会调用自定义类型的构造函数去开辟空间,并且利用构造函数初始化这一块空间,而对于delete来说就是调用析构函数清理空间
三、new和delete的底层原理
1、全局的operator new和全局的operator delete
其实在new和delete的底层上,他们两个是调用了一个全局的operator new和全局的operator delete,这两个全局函数的里面实际还是使用了malloc和free,底层代码: