首页 > 系统相关 >内存管理--new和delete

内存管理--new和delete

时间:2024-12-01 17:58:05浏览次数:10  
标签:初始化 malloc -- plus 空间 new delete

目录

1.new

2.delete

3.new与malloc、delete与free的区别与联系

4.关于sizeof的结果,可能多4B的解释:

5.定位new表达式(了解)

1.new

1.1作用

开辟一块空间,如果开辟失败,就直接报异常。功能性和malloc一样(开空间)。

1.2格式

                

注:类型分为内置类型和自定义类型。区别就是自定义类型会调用构造。

注:如果数量只有一个,那么数量不需要写,初始化用 “()”。

        如果数量是两个以上,那么数量需要用“[ ]”里面填写,初始化用“{ }”。

                

                

注:如果我们一个也不初始化,编译器就会存随机值。

        如果初始化了哪怕1个,剩下的也会初始化为0。

                

                ​​​​​​​        

2.delete

2.1作用:

释放一块空间,如果失败就会报异常。功能性与free一样(释放空间)。

2.2格式:

        ​​​​​​​        

        ​​​​​​​        

3.new与malloc、delete与free的区别与联系

对于内置类型:new(delete)是malloc(free)的plus版本。

对于自定义类型:new(delete)是malloc(free)的plus plus版本。至于为什么是两个plus,我们接下来了解。

3.1首先了解operator new函数和operator delete函数:

new和delete是用户进行动态内存申请和释放的操作符,operator new 和 operator delete 是系统提供的全局函数,new在底层调用operator new来申请空间,delete在底层通过operator delete 来释放空间。

operator new:该函数实际通过malloc来申请空间,当malloc申请空间成功时直接返回;申请空间失败,如果用户设置了措施,则继续申请,否则抛异常。

3.2为什么内置类型是plus,自定义类型是plus plus

1.内置类型:new和malloc,delete和free基本相似,不同的地方在于,new(delete)申请和释放的是单个元素的空间,new[ ]和delete[ ]申请和释放的是连续空间,可以控制了。而且申请空间失败会抛异常,malloc会返回NULL。

总结一句话就是:可以控制的更精准了,不需要检测 申请空间 失败了,会抛异常(plus的地方)。

        ​​​​​​​        

2.自定义类型:

总结一句话就是:如果申请空间失败,会抛异常(第一个plus),自动调用构造和析构(第二个plus)

3.3一些细节的区别:

共同点:malloc/free/new/dlelte都是从堆上申请空间,并且需要用户手动释放。

不同的地方是:

  1. malloc和free是函数。new和delete是操作符。
  2. malloc申请的空间不会初始化。new可以初始化。
  3. malloc申请空间时,需要手动计算空间大小并传递。new只需在其后面跟上类型、数量即可
  4. malloc返回值是void *,需要强制类型转换。new不需要。
  5. malloc申请空间失败时,返回的是NULL,需要判断。new不需要,但是new需要捕获异常。
  6. 申请自定义类型时,malloc/free只会开辟空间,不会调用构造和析构。new不仅会开空间,还会自动调用构造和析构。

4.关于sizeof的结果,可能多4B的解释:

        ​​​​​​​        

        

我们会看见,开p2空间的时候,是84.而不是80,多开了4B的空间。为什么?

我们又会发现,这4B 又消失了。

        ​​​​​​​        

至于为什么是4B,为什么要有这个东西,至于构造有没有多开4B。我就不太了解了......

5.定位new表达式(了解)

5.1作用:

可以显示调用构造函数。

实践价值:只有在池化技术中,提高系统的效率,才会用定位new。一般别的场景也不会用,系统已经帮我们做的很好了。

5.2定义:

定位new表达式是在已分配的原始内存空间中调用构造函数初始化一个对象。

5.3使用格式:

new(place_address) type 或者 new(place_address) type(initializer-list)

place_address 必须是一个指针,initializer-list是类型的初始化列表。

5.4使用场景:

定位new表达式在实际中一般是配合内存池使用。因为内存是分配出的内存没有初始化,如果是自定义类型的对象,需要使用new 的定义表达式进行显示构造函数进行初始化。

标签:初始化,malloc,--,plus,空间,new,delete
From: https://blog.csdn.net/2301_79202899/article/details/144142105

相关文章

  • 代码随想录算法训练营第十四天 | 226.翻转二叉树、 101. 对称二叉树、104.二叉树的最
    文档讲解:代码随想录视频讲解:代码随想录状态:完成4道题226.翻转二叉树整体思路:交换每一个节点的左右孩子思考:使用哪种遍历方式?建议使用前序或后序遍历(中序遍历比较绕)​前序遍历#Definitionforabinarytreenode.#classTreeNode:#def__init__(self,va......
  • 使用DataGrip连接Oracle数据库造测试数据
    文章目录前言DataGrip连接Oracle数据库连接数据库构成操作数据库造测试数据总结前言软件测试中,当涉及到对特定规则的验证时,常常需要我们在数据库中构造合适的数据。以航空公司为例,航段数与会员等级之间存在着明确的关联规则,测试这一规则需要一定的航段数,我们就需要......
  • 教职云智慧职教视频课件课程下载工具,如何在电脑端下载智慧职教视频课程课件资料到本地
    一.安装智慧职教课程下载器1.获取学无止下载器https://www.xuewuzhi.cn/icve_downloader2.下载安装后,然后点击桌面快捷方式运行即可。注意:杀毒软件可能会阻止外部exe文件运行,并将其当做成病毒,直接添加信任即可,本软件绝对没有木马病毒。二.使用说明1.学无止下载器介绍学......
  • 2024-2025-1 20241413 《计算机基础与程序设计》第十周学习总结
    班级链接https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP作业要求https://www.cnblogs.com/rocedu/p/9577842.html#WEEK10作业目标信息系统数据库与SQL人工智能与专家系统人工神经网络模拟与离散事件排队系统天气与地震模型图形图像教材学习内容......
  • FireDAC
    TFDGUIxLoginDialogTFDGUIxLoginDialog是FireDAC中用于登录数据库的对话框组件。以下是对TFDGUIxLoginDialog的详细介绍:功能用户凭证输入:TFDGUIxLoginDialog提供了一个界面,允许用户输入必要的登录凭证,如服务器地址、用户名和密码。这简化了数据库连接过程,使得用户无需直接处......
  • PbootCMS模板指定内容标签调用
    调取指定内容:html {pboot:contentid=*}<ahref="[content:link]">[content:title]</a>{/pboot:content}控制参数:id=*:内容的ID号,必填scode=*:单页的分类编码,必填,仅适用于单页内容可使用的内容标签:[content:id]:编号[content:scode]:栏目编码[content:subscode......
  • PbootCMS站点信息调用
    站点信息标签适用范围:全站任意地方均可使用。标签作用:用于调取网站的基本配置信息,对应后台的“基础内容>站点信息”。示例代码:html{pboot:siteindex}站点入口地址{pboot:sitepath}站点路径{pboot:sitelanguage}站点语言{pboot:sitetitle}站点标题{pboot:sitesubtitle}站点......
  • PbootCMS翻页分页条标签如何调用
    分页条标签:{page:bar}:系统内置的完整分页条{page:current}:当前页码{page:count}:总页数{page:rows}:总数据行数{page:index}:首页链接{page:pre}:前一页链接{page:next}:下一页链接{page:last}:尾页链接{page:status}:分页状态信息{page:numbar}:数字条......
  • zblog 获取全部分类列表函数 GetCategoryList 的参数和使用方法介绍
    函数参数$select (数组):获取指定数据。$where (数组):数据获取限制规则。$order (数组):数据获取排序规则。$limit (数组):获取数据数量限制。$option (数组):附加限制选项,可用来获取指定范围内的数据。函数输出输出一个数组,包含分类列表数据。示例代码{foreach......
  • 织梦DEDECMS缩略图失真模糊的终极完美解决办法
    设置缩略图大小系统->附件设置,将缩略图默认宽度、高度设为大于等于全站所有调用缩略图的最大尺寸。修改 include/extend.func.php 文件在文件末尾添加以下代码:functionthumb($imgurl,$width,$height,$bg=true){global$cfg_mainsite,$cfg_multi_si......