C++——内存管理+模块

这篇具有很好参考价值的文章主要介绍了C++——内存管理+模块。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作者:几冬雪来 

时间:2023年5月19日

内容:C++——内存管理+模块

目录

前言:  

1.new和delete操作自定义类型: 

operator new/delete: 

定位new表达式(placement-new): 

malloc/free和new/delete区别:

2.模板: 

结尾: 


前言:  

在上一篇博客中我们成功的对我们的类和对象的知识进行了收尾工作,并且加入了内存管理这个新的知识点,今天就进一步对其进行讲解。 

C++——内存管理+模块

1.new和delete操作自定义类型: 

在上一篇博客中,我们引入的新的操作符——new和delete

并且对它们两个新操作符的作用,写法还有和C语言中malloc,realloc。calloc的哪里有所不同都一一进行了讲解。  

C++——内存管理+模块

在这里我们可以看出来。

new的时候这里我们的代码会去调用构造函数,同时在delete的时候也会去调用我们的析构函数

因此以后绝大部分地方我们都会用new和delete来代替我们的free和malloc

C++——内存管理+模块

同时在new对数组进行初始化的时候,如果在这里我们是多参数的情况就需要这样书写。 

同样的在这里我们也会对其进行优化。 

当然,在一般情况下如果我们像上面这样写的话,只给3个是不行的

这里我们就需要默认构造来对其进行实现才能正常使用,如果没有默认构造我们就要用4个

 C++——内存管理+模块

对比下来在动态申请内置类型的数据的时候

new/malloc除了用法上,其他方面并没有什么区别

但是在动态申请自定义类型的数据的时候。

new/malloc除了用法上,还有一个中大区别,new和delete会调用构造函数初始化,析构函数情理

operator new/delete: 

在讲解了我们的new和delete之后。

接下来我们就来讲解两个操作符之间的底层构造。  

在这里我们的operator new/delete并不是直接运算符重载,而是全局函数,是库里面的函数

 C++——内存管理+模块

new它的底层和malloc的底层是大致相同

同时我们的delete也是和free一样

因此我们可以在代码中对free和malloc进行修改。  

C++——内存管理+模块

从这里也可以空间,在用法上我们的operator new和malloc是一样的

但是它们所产生的价值却是不一样的

那么我们就来对其讲一讲。

C++——内存管理+模块

这里在我们malloc的时候如果我们申请空间失败的话,在这里是返回空

这一点和我们C++中的new有所不同

C++——内存管理+模块

在这里C++中,如果面向对象语言处理失败,不喜欢用返回值,更建议使用抛异常

而我们的异常是要被捕获的。 

C++——内存管理+模块

这也就解释了为什么我们的operator new在全局中,因为它是独属于给new进行使用的

同时通过上面的话我们也可以看出。

new在开空间的时候先去调用operator new,然后operator new再去调用我们的malloc

但是在需要申请一个堆上的栈对象delete又是相反,我们是先调用析构再释放空间。 

C++——内存管理+模块

这里是3块空间,一个是指针,在我们malloc函数的栈里面,一个是栈对象,它在堆上,在我们的栈对象中有一个指针指向我们的空间还是在栈对象上

C++——内存管理+模块

通过上面的讲解,我们也可以可以判断出来,C语言和C++相对比除了有用法上的区别

还有失败时候也存在区别。 

那么从此以后,我们就不用像C语言那样进行判断是否失败返回为空的操作,而是用到我们的捕获

C++——内存管理+模块

也就是我们这里的try...catch,这里我们就简单的看一下它的写法即可。

在上面说过,现在我们可以用new去替代我们的malloc,但是这并不意味着malloc就毫无作用了,它只是隐藏在里面使用了。 

定位new表达式(placement-new): 

接下来我们来了解一下new的其他的用法。

对一块已有的空间调用构造函数。 

C++——内存管理+模块

在这里我们就可以显示的调用构造函数。 

这里我们的p1是内置类型不会自动的调用析构,所以我们也要显示调用析构函数

但是这种方法在我们现在看来并没有什么用。 

这里如果对其使用的话就要了解到我们的池化技术。 

而我们的池化技术包括了:内存池,连接处,线程池等等

 在这里我们的池就是用来方便我们的。

简单的举个例子:以前我们每次要买笔记本,笔什么的都要先去找到父母要到钱,但是我们的池化技术就类似把买文具的钱放在某个盒子里,放在一固定位置,需要的时候就直接去拿,这里就能方便我们自己

malloc/free和new/delete区别:

C++——内存管理+模块

2.模板: 

讲解完了内存管理,接下来我们就要讲解C++的一个非常非常重要的知识点——模板

在以后我们学习很多知识都需要用到模板。

C++——内存管理+模块

像我们这里如果要去执行不同类型的值的互换,那么在这里我们就需要写很多个函数对其一一匹配

那么在这里在这里我们就要使用到我们的模板。 

在模板这里我们又将其分为函数模板和类模板。 

C++——内存管理+模块

在这里就是我们模板的代码书写。 

接下来我们就来写一个完整的代码对其进行更加详细的分析。 

C++——内存管理+模块

这里我们就通过了模板来使值进行了交换

同时在使用了模板之后,上面的3种不同类型交换值的写法我们就可以不用写了

但是这里要知道的一个点是:

虽然我们调用了模板,可以在这里我们并非调用的同一个函数。 

C++——内存管理+模块

这里我们的模板通过判断传的参数是整形,浮点型来推演出我们的函数

这一个过程被我们称为模板的实例化。 

但是这里我们实际调用的并不是模板,而是模板生成的函数,最后还是编译器生成的函数。 

同样的这里我们也可以来交换日期类函数。

结尾: 

到这里我们又小小的结束了一个小板块的知识,也学习了下一个板块的些许内容。在这里我们的类和对象,动态管理都是十分重要的知识板块,有时间一定要去复习和做题去巩固知识。最后希望这篇博客能带来帮助。文章来源地址https://www.toymoban.com/news/detail-455792.html

到了这里,关于C++——内存管理+模块的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++内存管理(3)——内存池

    利用默认的内存管理操作符 new/delete 和函数 malloc()/free() 在堆上分配和释放内存会有一些额外的开销。 系统在接收到分配一定大小内存的请求时,首先查找内部维护的内存空闲块表,并且需要根据一定的算法(例如分配最先找到的不小于申请大小的内存块给请求者,或者分配

    2024年02月09日
    浏览(42)
  • C++——内存分配与动态内存管理

    🌸作者简介: 花想云 ,在读本科生一枚,致力于 C/C++、Linux 学习。 🌸 本文收录于 C++系列 ,本专栏主要内容为 C++ 初阶、C++ 进阶、STL 详解等,专为大学生打造全套 C++ 学习教程,持续更新! 🌸 相关专栏推荐: C语言初阶系列 、 C语言进阶系列 、 数据结构与算法 本章我们

    2023年04月17日
    浏览(56)
  • 【C++】C++内存管理,模板

    C++中通过 new 和 delete 两个操作符实现动态内存管理 为自定义类型设计,可以在申请空间得同时初始化 使用 new 先申请空间,再调用构造 使用 delete 时先调用析构,再释放空间 operator new 和 operator delete 是系统提供的全局函数,不是运算符重载, 在使用 new 或 delete 时,底层实

    2024年02月01日
    浏览(44)
  • c++ 内存管理一:初识内存分配工具

    前言 侯捷 c++内存管理学习总结笔记。 在C++中,有几种常用的内存分配工具可以帮助进行动态内存管理。 从c++应用程序自上而下,通常会有这样的几种分配内存的方式,当然最终都是直接或间接的调用系统的API。 1 new 和 delete new 和 delete :new操作符用于在堆上分配内存,de

    2024年02月11日
    浏览(46)
  • 【C++初阶】七、内存管理(C/C++内存分布、C++内存管理方式、operator new / delete 函数、定位new表达式)

    ========================================================================= 相关代码gitee自取 : C语言学习日记: 加油努力 (gitee.com)  ========================================================================= 接上期 : 【C++初阶】六、类和对象(初始化列表、static成员、友元、内部类)-CSDN博客  ==================

    2024年02月05日
    浏览(45)
  • C++ 内存管理(建议收藏)

    内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都会发生,因此要想成为C++高手,内存管理一关是必

    2024年02月06日
    浏览(44)
  • C++动态内存管理+模板

    💓博主个人主页:不是笨小孩👀 ⏩专栏分类:数据结构与算法👀 C++👀 刷题专栏👀 C语言👀 🚚代码仓库:笨小孩的代码库👀 ⏩社区:不是笨小孩👀 🌹欢迎大家三连关注,一起学习,一起进步!!💓 C语言内存管理方式在C++中可以继续使用,但有些地方就无能为力,而且使

    2024年02月09日
    浏览(45)
  • 【C++初阶】动态内存管理

      说明: 1. 栈又叫堆栈--非静态局部变量/函数参数/返回值等等,栈是向下增长的; 2. 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口     创建共享共享内存,做进程间通信; 3. 堆用于程序运行时动态内存分配,堆是可以上增长的;

    2024年02月06日
    浏览(41)
  • 【C++】——动态内存管理

      目录 🌞导读 🌔C/C++内存分布  🌔C++内存管理方式  🌗new/delete操作内置类型  🌗new和delete的使用方法 🌔operator new与operator delete函数 🌔new和delete的实现原理 🌗内置类型 🌗自定义类型 🌔定位new表达式  🌗使用格式 🌔malloc/free和new/delete的区别 🌟作者简介: 日出等日

    2024年02月07日
    浏览(35)
  • 【C++修炼之路】内存管理

    👑作者主页:@安 度 因 🏠学习社区:StackFrame 📖专栏链接:C++修炼之路

    2024年02月16日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包