c和c++动态内存管理
c动态内存管理
c语言malloc,calloc,realloc堆区申请内存,均为free释放,malloc是最基础版本,calloc是功能升级版,realloc是可以修改已生成的内存空间
c++动态内存管理
new 和delete,本质上是malloc及free命令的封装。结合指针和智能指针使用。注意申请普通变量和变量数组的区别。申请变量数组空间不能够初始化。
new 和delete原理,本质仍然是使用malloc和free。
operator new 和 operator delete
operator new/operator delete为库函数并非运算符重载,operator new/operator delete与malloc/free功能相同都是动态分配内存空间,并且operator new/operator delete的实现是通过调用malloc/free来实现的,是malloc/free的一层封装,所不同的是,operator new/operator delete分配失败会抛出异常,而malloc/free分配失败会返回NULL指针。因此可通过
NEW_ARRAY/DELETE_ARRAY宏,模拟实现new[]/delete[]申请和释放数组。
一段示例的宏定义的new和delete操作,虽然不能还存在问题,但可以作为定性理解。使用的时候加上这个定义的头文件就可以使用这个宏定义的new和delete函数了。还需要调试并搞清楚P是什么含义,指针的意思?
该段引用原文链接:https://blog.****.net/mr_zhang/article/details/75491028
new定位表达式
new(地址)类型(参数),功能类似于realloc,对已生成的内存进行调整。
常见问题
malloc/free和new/delete对比
均在堆上生成内存
malloc和free是函数,new和delete是操作符
malloc申请的空间不会初始化,new可以初始化
malloc的返回值为void*, 在使用时必须强转,new不需要,因为new后跟的是空间的类型
内存泄露问题
申请忘记释放
异常安全问题相关引用链接 https://blog.****.net/Luckily0818/article/details/106889772