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型,并初始化为10
	int* a1 = new int(10);

	//动态申请一个int型数组
	int* arr1 = new int[10];
	
	//动态申请一个int型数组,并初始化
	int* arr2 = new int[3] {1, 2, 3};

	//若为完全初始化,则后面的值会默认初始化为0
	int* arr3 = new int[10] {1, 2, 3};

	//每new一个变量,用完后一定要delete
	delete 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.mfbz.cn/a/617586.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

6818Linux内核--Bootloader应用分析

Bootloader应用分析 一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次: 引导加载程序。包括固化在固件( firmware )中的 boot 代码(可选),和 Boot Loader 两大部分。 Linux 内核。特定于嵌入式板子的定制内核以及内核的启动参数。 文件系统…

Polygon市值机器人

随着区块链技术的蓬勃发展和数字货币市场的日益繁荣,投资者们对于如何精准把握市场动态、实现资产稳健增长的需求愈发迫切。在这个背景下(市值管理飞//机//aishutuyu),Polygon市值机器人应运而生,作为一款基于Polygon公…

TriCore:Interrupt

今天简单总结下 TriCore 的中断路由模块。 名词缩写 缩写全称说明IRInterrupt Router SRService Request 包括: 1. External Resource 2. Internal Resource 3.SW(Software) SPService Privoder 包括: 1. CPU 2. DMA SRNServic…

【5分钟学会一个知识点】01.Elasticsearch基本操作-增删改查

目录 【5分钟学会一个知识点-探索现代搜索与分析引擎的魅力】01.Elasticsearch基本操作-增删改查1.基本操作1.1索引操作1.2文档操作1.3查询1.4修改数据1.5查询1.5.1条件查询1.5.1.1遍历所有的索引1.5.1.2查询某个索引1.5.1.3条件查询1:使用GET url传参数1.5.1.4条件…

proteus数模转换器DAC0832的应用

proteus proteus,即EDA工具软件。Proteus软件是英国Lab Center Electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是比较好的仿真单片机及外围器件的工具。虽然国内推广刚起步,但已受到…

油泼辣子在食品类别可以申请成商标不!

前阵韩国人在美国申请“chili crunch”油泼辣子作为商标,还准备禁止华人餐馆使用投诉侵权并索赔,普推知产老杨在USPTO上面检索发现,这个人申请的主要是30类方便食品的调味品,商标分类是全球通用的。 商标名称不能申请本类所属的通…

C++的数据结构(三):栈

栈(Stack)是一种后进先出(LIFO, Last In First Out)的数据结构,它只允许在一端(称为栈顶)进行插入和删除操作。栈的这种特性使得它在解决函数调用、括号匹配、表达式求值等问题时具有天然的优势…

Linux下多线程相关概念

thread 1.什么是线程1.1 线程优缺点1.2 线程异常1.3 线程用途 2. 进程和线程区别3. 线程控制3.1 POSIX线程库3.2 pthread_create()3.3 线程ID3.4 线程ID地址空间布局pthread_self() 3.5 线程终止pthread_exit函数pthread_cancle函数 3.6 线程等待3.7 分离线程__thread修饰全局变…

【安全每日一讲】加强数据安全保护 共享数字化时代便利

前言 数据安全是数据治理的核心内容之一,随着数据治理的深入,我不断的碰到数据安全中的金发姑娘问题(指安全和效率的平衡)。 DAMA说,降低风险和促进业务增长是数据安全活动的主要驱动因素,数据安全是一种资…

Django项目之电商购物商城 -- 修改/删除收货地址/设置默认地址

Django项目之电商购物商城 – 修改/删除收货地址/设置默认地址 修改和删除收货地址依旧实在user应用下进行 , 其思路和新增收货地址非常相似 依旧是更具前端的数据来写 在这里修改和删除地址的URL是相同的 , 所以我们只要设置一个模型类就可以实现这两个功能 一 . 修改地址…

apk反编译修改教程系列-----反编译apk 去除软件强制更新的八种方式步骤解析【十七】

安卓有的apk 软件会不断更新。但有些用户需要旧版的有些功能或者新版功能增减原因等等。需要不更新继续使用。这类问题有的可以简单修改版本号来跳过更新。或者有的软件可以忽略。但对于某些无法跳过更新界面等等的apk。就需要深度反编译来去除软件的强制更新。 通过课程可以了…

Obsidian/Typora设置图床

在obsidian中默认图片是保存在本地的,但是在要导出文档上传到网上时,由于图片保存在本地,会出现无法加载图片的问题。 这里引用的一段话: 这里使用picgo-core和gitee实现图床功能, 参考1: Ubuntu下PicGO配…

【Docker】Ubuntu下Docker的基本使用方法与常用命令总结

【Docker】docker的基本使用方法 镜像image与容器container的关系基本命令- 查看 Docker 版本- 拉取镜像- 查看系统中的镜像- 删除某个镜像- 列出当前 Docker 主机上的所有容器,包括正在运行的、暂停的、已停止的,以及未运行的容器- 列出当前 Docker 主机…

【LeetCode算法】242. 有效的字母异位词

提示:此文章仅作为本人记录日常学习使用,若有存在错误或者不严谨得地方欢迎指正。 文章目录 一、题目二、思路三、解决方案 一、题目 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意:若 s 和 t 中每…

德克萨斯大学奥斯汀分校自然语言处理硕士课程汉化版(第一周) - 自然语言处理介绍和线性分类

自然语言处理介绍和线性分类 1. 自然语言处理介绍2. 线性二分类3. 情感分析和基础特征提取 3.1. 情感分析3.2. 特征提取3.3. 文本预处理 4. 学习的基础-梯度下降算法5. 感知机6. 逻辑回归7. 情感分析8. 感知机和逻辑回归 1. 自然语言处理介绍 自然语言处理的目标是什么 能够解…

问题与解决:大华视频后台播放报错

大华播放器接到BI系统后,实时监控视频后台播放一段时间后,报错如下: The play() request was interrupted because video-only background media was paused to save power. 在谷歌浏览器下,直接用代码运行系统,视频在…

腾讯云服务器之ssh远程连接登录及转发映射端口实现内网穿透(实现服务器访问本地电脑端口)

目录 一、创建密钥绑定实例二、设置私钥权限三、ssh远程连接到服务器四、修改root密码五、端口转发(实现服务器访问本地电脑的端口) 一、创建密钥绑定实例 创建密钥会自动下载一个私钥,把这个私钥复制到c盘 二、设置私钥权限 1、删除所有用户…

企业级复杂前中台项目响应式处理方案

目录 01: 前言 02: 响应式下navigtionBar实现方案分析 数据 视图 小结 03: 抽离公用逻辑,封装系列动作 04: PC端navigationBar私有逻辑处理 05: 分析 navigationBar 闪烁问题 06: 处理 navigationBar 闪烁问题 07: category数据缓存,覆盖…

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

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