博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++中的内存申请和分配关键字
阅读量:6697 次
发布时间:2019-06-25

本文共 1023 字,大约阅读时间需要 3 分钟。

  hot3.png

1.new、delete、malloc、free关系

delete会调用对象的析构函数,和new对应,free只会释放内存,new调用构造函数。malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。

2.delete与 delete []区别

delete只会调用一次析构函数,而delete[]会调用每一个成员的析构函数。在More Effective C++中有更为详细的解释:“当delete操作符用于数组时,它为每个数组元素调用析构函数,然后调用operator delete来释放内存。”delete与new配套,delete []与new []配套

MemTest *mTest1=new MemTest[10];

MemTest *mTest2=new MemTest;

Int *pInt1=new int [10];

Int *pInt2=new int;

delete[]pInt1; //-1-

delete[]pInt2; //-2-

delete[]mTest1;//-3-

delete[]mTest2;//-4-

在-4-处报错。

这就说明:对于内建简单数据类型,delete和delete[]功能是相同的。对于自定义的复杂数据类型,delete和delete[]不能互用。delete[]删除一个数组,delete删除一个指针。简单来说,用new分配的内存用delete删除;用new[]分配的内存用delete[]删除。delete[]会调用数组元素的析构函数。内部数据类型没有析构函数,所以问题不大。如果你在用delete时没用括号,delete就会认为指向的是单个对象,否则,它就会认为指向的是一个数组。

转载于:https://my.oschina.net/mskk/blog/889615

你可能感兴趣的文章
Linux学习之CentOS(三)----将Cent0S 7的网卡名称eno16777736改为eth0
查看>>
解说redis中如何实现高可用
查看>>
小程序类似抖音视频整屏切换
查看>>
NG客制项目下的I18n国际化标准方案
查看>>
19-03-25
查看>>
activity idea编写bpmn流程文件
查看>>
windows Virtualbox下配置Ubuntu,且用ssh连接
查看>>
知识点漏缺总结
查看>>
【Java】Mybatis mapper动态代理方式
查看>>
linux lnmp15 部署laravel项目
查看>>
react-native-baidu-map使用及注意问题
查看>>
Flutter Mac iOS 环境配置
查看>>
PAT 1048 数字加密
查看>>
JVM原理探究及调优方法论
查看>>
iphoneX样式兼容
查看>>
Java缓存浅析
查看>>
关于微信小程序swiper的问题
查看>>
android 连接指定wifi
查看>>
爱屋吉屋病死后,链家、中原、我爱我家们却哭不得笑不得
查看>>
《PWA实战:面向下一代的Progressive Web APP》读书笔记
查看>>