【C++初阶】:动态管理

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

前置知识(堆区):c语言动态内存
额外知识:栈区

【C++初阶】:动态管理

一.new和delete(一般使用)

【C++初阶】:动态管理

【C++初阶】:动态管理

【C++初阶】:动态管理

【C++初阶】:动态管理

对于自定义类型

【C++初阶】:动态管理

对多个自定义类型创建时,必须进行初始化,如果不想初始化,那么就得给缺省值。

【C++初阶】:动态管理

注意:在申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数,而malloc与
free不会。

二.operator new与operator delete函数(底层)

这两个函数不是简单的对new和delete进行运算符重载,它们其实是全局函数。下面是两个库函数的实现代码(看不懂很正常)

【C++初阶】:动态管理

简单使用一下

【C++初阶】:动态管理

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

2.通过上述两个全局函数的实现知道,operator new 实际也是通过malloc来申请空间,如果malloc申请空间成功就直接返回,否则执行用户提供的空间不足应对措施,如果用户提供该措施就继续申请,否则就抛异常。operator delete 最终是通过free来释放空间的。

用法

【C++初阶】:动态管理

三.new和delete的实现原理

内置类型

【C++初阶】:动态管理

自定义类型

【C++初阶】:动态管理

四.定位new(placement-new)

1.定位new表达式是在已分配的原始内存空间中调用构造函数初始化一个对象。 使用格式: new (place_address)
type或者new (place_address) type(initializer-list)
2.place_address必须是一个指针,initializer-list是类型的初始化列表 使用场景:
定位new表达式在实际中一般是配合内存池使用。因为内存池分配出的内存没有初始化,所以如果是自定义类型的对象,需要使用new的定义表达式进行显示调构造函数进行初始化。

注意这里并不是new,而是new的另一个用法,可以显示调用构造函数

【C++初阶】:动态管理
【C++初阶】:动态管理

插个小知识,这里也必须显示调用析构函数,因为p1是指针,属于内置类型不会自动调用析构函数。

五.malloc和new的区别

【C++初阶】:动态管理文章来源地址https://www.toymoban.com/news/detail-451746.html

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

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

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

相关文章

  • C++项目实战——基于多设计模式下的同步&异步日志系统-③-前置知识补充-设计模式

    🌸作者简介: 花想云 ,在读本科生一枚,C/C++领域新星创作者,新星计划导师,阿里云专家博主,CSDN内容合伙人…致力于 C/C++、Linux 学习。 🌸 专栏简介:本文收录于 C++项目——基于多设计模式下的同步与异步日志系统 🌸 相关专栏推荐: C语言初阶系列 、 C语言进阶系列

    2024年02月09日
    浏览(43)
  • 【C++初阶】内存管理 && 初识模板

    C/C++的内存分布主要分为 栈区、堆区、数据段和代码段,还有内存映射段。 栈又叫堆栈–非静态局部变量/函数参数/返回值等等,栈是向下增长的。 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信。

    2024年02月04日
    浏览(45)
  • 【C++】是内存管理,但C++ !! && 模板初阶

    目录 一,回望C语言内存 二, C++  内存管理方式  1. 内置类型 2. 自定义类型 3. new malloc 返回内容区别 4. operator new    operator  delete  5. malloc/free和new/delete的区别总结 6. 定位new表达式(placement-new) (了解) 三,模板初阶 1.  泛型编程——概念 2. 函数模板 (1. 模板实例化    

    2024年02月08日
    浏览(43)
  • 【初阶】C语言指针详解——指针必备的7大知识点

    本篇文章我们来了解C语言中指针的相关内容,对于指针可以说是C语言学习中较难理解的内容。本篇以了解指针为目的,以初识为导向,从表层入手,浅析C指针! 理解指针的 两个要点: 指针是内存中一个最小单元的编号,也就是地址 平时口语中说的指针,通常指的是指针变

    2024年02月02日
    浏览(49)
  • 【1++的C++初阶】之内存管理

    👍作者主页:进击的1++ 🤩 专栏链接:【1++的C++初阶】 如上图所示,C/C++程序在运行时占用的内存主要是这几部分 我们首先来说他们各自的作用与用法: malloc:malloc是C语言中用来动态申请内存的函数,它能够申请所输入参数大小的空间,单位为字节,并且malloc的类型为vo

    2024年02月05日
    浏览(33)
  • 【初始C语言8】详细讲解初阶结构体的知识

    💓作者简介: 加油,旭杏,目前大二,正在学习 C++ , 数据结构 等👀 💓作者主页:加油,旭杏的主页👀 ⏩本文收录在:再识C进阶的专栏👀 🚚代码仓库:旭日东升 1👀 🌹欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖         在上一章中,我们浅浅地学习了初阶指针的相

    2024年02月08日
    浏览(42)
  • 【C++初阶】一、入门知识讲解(C++关键字、命名空间、C++输入&输出、缺省参数、函数重载)

    ========================================================================= 相关代码gitee自取 : C语言学习日记: 加油努力 (gitee.com)  ========================================================================= 接上期 : 【数据结构初阶】十一、归并排序(比较排序)的讲解和实现 (递归版本 + 非递归版本 -- C语言实

    2024年02月05日
    浏览(49)
  • 『初阶数据结构 • C语言』⑧ - 动态顺序表详解(附完整源码)

    本章内容 写在前面 1.静态与动态是指什么? 2.动态顺序表结构的定义 3.动态顺序表的函数接口实现 4.动态顺序表的问题及思考 5.关于顺序表的OJ题 6.OJ答案及解析 1.移除元素 2.删除有序数组中的重复项 ​3.合并两个有序数组 7.动态顺序表完整源码 1.SeqList.h 2.SeqList.c     上一章

    2024年02月16日
    浏览(43)
  • 【C语言】-- 一篇带你了解C语言内存五大区——栈区,堆区,全局区,常量区,代码区

    目录 1 C语言的内存分区 1.1 内存五大分区 1.2 内存分区简介 1.2.1 栈区(stack) 1.2.2 堆区(heap) 1.2.3 (全局)静态区 1.2.4 常量区 1.2.5 代码区 创作不易,如果本篇博客对您有一定的帮助,大家记得留言+点赞哦。 C语言已经持续学习一段时间了,今天特此总结一下关于C语言内存的五大区

    2024年02月16日
    浏览(48)
  • C语言初阶测评题:测试你的基础知识和编程技能!!

    💓博客主页:江池俊的博客 ⏩收录专栏:C语言刷题专栏 👉专栏推荐:✅C语言初阶之路 ✅C语言进阶之路 💻代码仓库:江池俊的代码仓库 🎉欢迎大家点赞👍评论📝收藏⭐ 🎈前言: 欢迎来到这个关于C语言的初阶测评题博客!在这里,我们将为您呈现一系列考察基础知识

    2024年02月11日
    浏览(34)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包