C++动态内存区域划分、new、delete关键字

目录

一、C/C++中程序的内存区域划分

为什么会存在内存区域划分?

二、new关键字

1、内置类型的new/delete使用方法:

2、new和delete的本质


一、C/C++中程序的内存区域划分

为什么会存在内存区域划分?

因为不同数据有不同的存储需求,各区域满足不同的需求。

例如:

(1)、一些临时变量,局部变量存储在栈区

(2)、常用数据结构或一些算法(如归并排序)中会用到动态内存开辟,该内存是在堆区申请。

(3)、全局变量、静态变量存储在数据段(静态区)。

(4)、一些只读数据,如字符常量、可执行代码(指令)存储在代码段(常量区)。

二、new关键字

 C语言中动态内存管理方式使用malloc/calloc/realloc/free函数来实现,C语言内存管理方式在C++中可以继续使用,但有些地方就无能为力,而且使用起来比较麻烦,因此C++又提出了自己的内存管理方式:通过newdelete操作符进行动态内存管理。

1、内置类型的new/delete使用方法:

	//动态申请一个int型int* a = new int;//动态申请一个int型,并初始化为10int* a1 = new int(10);//动态申请一个int型数组int* arr1 = new int[10];//动态申请一个int型数组,并初始化int* arr2 = new int[3] {1, 2, 3};//若为完全初始化,则后面的值会默认初始化为0int* arr3 = new int[10] {1, 2, 3};//每new一个变量,用完后一定要deletedelete a;delete a1;//注意数组的区别delete[] arr1;delete[] arr2;delete[] arr3;

注意:使用new未初始化时,不会有默认值,而是随机值。

2、new和delete的本质

new的本质是为了解决动态申请的自定义类型对象的初始化问题。

因为C语言中malloc函数不能给自定义类型进行初始化:

	//malloc不能给自定义类型初始化A* p1 = (A*)malloc(sizeof(A));

所以这时就可以用new和delete:

(1)、new的本质:开空间+调用构造函数初始化;

(2)、delete的本质:先调用析构函数+释放空间。

如下:

	//new给自定义类型初始化//调用默认构造函数A* p2 = new A();//调用带参数构造函数A* p3 = new A(1);//给对象数组初始化//(1)、有名对象A aa1, aa2, aa3;A* arr1 = new A[3]{ aa1,aa2,aa3 };//(2)、匿名对象A* arr2 = new A[3]{ A(),A(),A()};//(3)、隐式类型转换A* arr3 = new A[3]{ 1,2,3 };

注意:

(1)、内置类型的底下申请释放,new和malloc除了用法上,没有区别;

(2)、malloc申请失败会返回NULL,而new申请失败会抛异常;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/836266.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SpringBoot记录】从基本使用案例入手了解SpringBoot-数据访问(1)

前言 在程序开发尤其是网页应用开发中,数据访问是必不可少的。通过前面的基本案例我们完成了一个简单的SpringBoot Web应用并对自动配置原理有了一定了解,本节在上述案例基础上,继续编写数据访问案例,将通过SpringBoot中数据访问…

音视频开发6 音视频录制原理和播放原理

音视频录制原理 音视频播放原理

VO、PO、DTO的区别

VO:值对象,用于视图层,它的作用是把某个指定页面(或组件)的所有数据封装起来。 PO:持久化对象,它跟持久层(通常是关系型数据库)的数据结构形成一一对应的映射关系&#…

# 电脑突然连接不上网络了,怎么办?

电脑突然连接不上网络了,怎么办? 一、原因分析: 1、IP 地址冲突 2、DNS 解析出现问题。 3、电脑网络设置是否打开了【移动热点】或【飞行模式】。 4、【WLAN AutoConfig】服务是否打开。 5、无线网卡驱动损坏。 6、检查 WIFI 开关是否…

java线程池源码解析:ThreadPoolExecutor源码,execute方法、addWorker方法解析

1. 概述 线程池 的作用不用太说了,线程池会按照一定的规则,创建和维护一定数量的线程。这些线程可以被循环利用,来处理用户提交的任务。对比不同线程池的使用方式,节省了频繁的创建和销毁线程带来的性能开销。 2. 概念理解 2…

从FasterTransformer源码解读开始了解大模型(2.0)代码通读01

从FasterTransformer源码解读开始了解大模型(2.0)代码解读01-看看头文件 写在前面的话 本篇的内容直接开始我们的代码通读,整个通读可能需要好几篇文章来将一整个gpt的代码结构给讲清楚。目前的计划是先从整体model层次开始讲,将…

Java8 Stream API在集合上执行复杂的数据处理查询

Java 8 引入的 Stream API 是一个高级工具,用于在集合上执行复杂的数据处理查询。Stream API 通过提供一系列的中间操作和最终操作,支持声明式处理(类似于SQL声明式语句)并且可以轻松使用多核架构。 创建Stream流 创建Stream 流…

HTML+VUE3组合式+ELEMENT的容器模板示例(含侧栏导航,表格,...)

一个简单的在html中使用Vue3及Element-plus vue-icons的整合示例&#xff1a; 一、示例截图 二、文件代码 直接复制到html文件在浏览器打开即可预览 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title&g…

CCleaner系统优化与隐私保护工具,中文绿色便携版 v6.23.11010

01 软件介绍 CCleaner 是一款高级的系统优化工具&#xff0c;其设计宗旨在于彻底清理 Windows 操作系统中积累的无用文件和冗余的注册表项。此举旨在显著提升计算机的运行效率并回收磁盘空间。该软件拥有高效的能力&#xff0c;可以清除包括临时文件、浏览器缓存及其历史记录在…

哪些设计模式,你使用过哪些设计模式

Java框架中运用了多种设计模式&#xff0c;以下是一些具体的例子以及它们在框架中的应用&#xff1a; 单例模式&#xff08;Singleton Pattern&#xff09;&#xff1a; 确保一个类只有一个实例&#xff0c;并提供全局访问点。例如&#xff0c;Java中的Runtime类使用了单例模式…

08 - hive的集合函数、高级聚合函数、炸裂函数以及窗口函数

目录 1、集合函数 1.1、size&#xff1a;集合中元素的个数 1.2、map&#xff1a;创建map集合 1.3、map_keys&#xff1a; 返回map中的key 1.4、map_values: 返回map中的value 1.5、array 声明array集合 1.6、array_contains: 判断array中是否包含某个元素 1.7、sort_a…

python中多态的概念及简单样例

目录 1、多态概念及关键要素&#xff1a; 2、代码样例&#xff1a; 1、多态概念及关键要素&#xff1a; 多态是面向对象编程中一个重要的概念&#xff0c;它允许不同类的对象对同一消息做出不同的响应。简单来说&#xff0c;多态性是指相同的方法调用可以在不同的对象上产生不…

UIKit之UIButton

功能需求&#xff1a; 点击按钮切换按钮的文字和背景图片&#xff0c;同时点击上下左右可以移动图片位置&#xff0c;点击加或减可以放大或缩小图片。 分析&#xff1a; 实现一个UIView的子类即可&#xff0c;该子类包含多个按钮。 实现步骤&#xff1a; 使用OC语言&#xf…

TypeScript常见面试题第七节

题目三十一:TypeScript 中声明合并的工作原理? 一、讲解视频 TS面试题三十一:TypeScript 中声明合并的工作原理? 二、题目解析 本题目考察对于 ts 中声明合并知识的了解,“声明合并”是指编译器将针对同一个名字的两个独立声明合并为单一声明。 合并后的声明同时拥有原先…

每日资讯——OpenAI与谷歌相争,火药味甚浓

OpenAI与苹果达成合作&#xff0c;ChatGPT或集成至IOS18 AI语音助手存在”幻觉“问题&#xff0c;或将集成至ChatGPT免费版 整合音频转录、文本转语音等功能的软件。奥特曼的终极目标是开发类似电影《她》中&#xff0c;可高度响应的虚拟助手&#xff0c;提升苹果Siri等现有语…

HCIP的学习(14)

过滤策略—filter-policy ​ 思科中&#xff1a;分发列表 ​ 过滤策略是只能够针对于路由信息进行筛选&#xff08;过滤&#xff09;的工具&#xff0c;而无法针对于LSA进行过滤。 在R4的出方向上配置过滤策略&#xff0c;使得R1不能学习到23.0.0.0/24路由信息1、抓取流量 […

Sping源码(七)—ConfigurationClassPostProcessor ——@PropertySources解析

序言 先来简单回顾一下ConfigurationClassPostProcessor大致的一个处理流程&#xff0c;再来详细的讲解PropertySources注解的处理逻辑。 详细的步骤可参考ConfigurationClassPostProcessor这篇帖子。 流程图 从获取所有BeanDefinition -> 过滤、赋值、遍历 -> 解析 -&…

自建WSUS更新服务器完成内网的安全补丁更新

一、适用场景 1、企业内部网络无法访问外网&#xff0c;所以搭建WSUS服务器&#xff0c;可以让内网环境进行更新补丁。 2、校园内部的电脑实训室一般不用外网资源&#xff0c;偶尔开启外网使用时&#xff0c;电脑实训室集体自动更新占用外网资源量大&#xff0c;所以搭建WSUS服…

项目文档分享

Hello , 我是小恒。提前祝福妈妈母亲节快乐 。 本文写一篇初成的项目文档 &#xff08;不是README.md哈&#xff09;&#xff0c;仅供参考 项目名称 脚本存储网页 项目简介 本项目旨在创建一个网页&#xff0c;用于存储和展示各种命令&#xff0c;用户可以通过粘贴复制命令到…

【深耕 Python】Quantum Computing 量子计算机(6)计算<m|V|n>数值积分

写在前面 往期量子计算机博客&#xff1a; 【深耕 Python】Quantum Computing 量子计算机&#xff08;1&#xff09;图像绘制基础 【深耕 Python】Quantum Computing 量子计算机&#xff08;2&#xff09;绘制电子运动平面波 【深耕 Python】Quantum Computing 量子计算机&…