C++内存管理(free和delete区别)

本文由小编本人创作,如有不对,请多指正!

我们先来讲一些常见的数据类型存储在哪些位置,大家可以根据下面的试题来检验一下自己

第一个是属于全局变量,他是储存在静态区的,第二个是静态全局变量,也是属于静态区第三个是静态变量,也是属于静态区,第四个是临时变量,储存在中,第五个是数组名,属于地址,储存在中,第六个是字符串的地址,也是储存在中,第七个是对字符串的地址解引用,得到的是字符串的第一个元素,因为字符串是储存在常量区中的,所以第七个储存在常量区中,第八个是一个指针,指针储存在中,第九个指的是指针所指向的内容,里面的内容是malloc出来的,malloc是在堆上开辟内存

接下来我们讲一讲在C++新的开辟内存的方式

补:申请单个元素空间的时候使用new和delete申请多个元素空间的时候使用new[]和delete[]一定要配套使用。

new/delete和malloc/free的最大区别

他们两者最大的区别就在于new和delete会调用相应的构造函数和析构函数,但是malloc和free不会自动调用

我先给大家演示他们最大的区别,然后再带大家看自动调用构造函数和析构函数有什么好处

然后我们就malloc一个自定义类型

我们运行程序,并没有自动调用构造函数或者析构函数

但是当我们使用new和delete时,我们可以看到自动调用相应的构造函数和析构函数

自动调用构造函数和析构函数的好处

我们看到上图中的自定义类型里,我多加了一个数组指针,因为我在card里面定义了一个Infor的对象,当我们使用free去释放内存的时候,其实只是释放了这个指针的内存,并没有释放这个指针所指向的空间的内存,就可能会造成内存泄露问题,但是new和delete就能有效避免这一问题。

下面小编为大家总结一下malloc/free和new/delete的不同

1.malloc是函数,new是一个操作符

2.malloc申请的空间不能初始化,new申请的空间能够初始化

3.malloc申请空间时需要手动输入空间类型的大小,但是new可以直接加空间类型,要是需要申请多个,在后面加个[],在括号中输入想要的个数即可。

4.malloc的返回值为void*,接收时需要强转,但是new不用

5.malloc申请失败返回的是NULL,使用时必须判空,但是new不需要,new需要捕捉异常

6.申请自定义对象时,malloc只会开辟空间,不会调用析构函数和构造函数,但是new在调用构造函数后完成对象的初始化,delete在释放空间前完成对资源的清理

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

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

相关文章

Keil5新建工程详细讲解

一. 新建文件夹并拷贝库文件 新建project文件夹后建立4个子文件夹:startup,device,drivers,main 二. 新建mdk工程 1. 打开MDK软件,再点击Project->New uVision Project…新建一个工程,在弹出的对话框内…

OpenCV中 haarcascades 级联分类器各种模型.xml文件介绍

haarcascades Haar Cascades 是一种用于对象检测的机器学习模型,特别是在OpenCV库中广泛使用。这些模型通过训练大量的正样本(包含目标对象的图像)和负样本(不包含目标对象的图像)来识别图像中的对象。Haar Cascades …

技巧解析,如何向Kimi提问才能写出更好的论文?

学境思源,一键生成论文初稿: AcademicIdeas - 学境思源AI论文写作 今天为大家整理、分享的Kimi提问技巧,将对论文写作的各个阶段提供帮助,可以以此来辅助学术论文撰写。 在此之前,先为大家科普一个概念——信息熵&am…

CSS实现前端小组件随笔

一.CSSJS实现打字机效果 1.1实现效果 1.2HTML部分 <span class"bottom-text"></span> 1.3CSS部分 .bottom-text {font-fanmily: "fangsong";display:inline-block;position:relative;font-size:20px;height:20px;inline-height:20px;color…

Redis 分片集群

一. 前言 前面文章介绍了主从集群和哨兵模式。其中主从集群可以通过读写分离的方式解决高并发场景下的读问题&#xff1b;而在主节点出现故障时&#xff0c;又可以通过哨兵模式的自动选举来实现高可用。 Redis 主从集群 && 哨兵模式 二. Redis 分片集群 2.1 分片集群…

图解 Twitter 架构图

写在前面 两年前&#xff0c;马老板收购了twitter&#xff0c;并且做了一系列的大动作。那么今天我们来看一下这个全球最火的软件之一的架构。 Twitter解析 开始之前&#xff0c;我先提前说明一下&#xff0c;我之前不是做搜推广的&#xff0c;所以对这些了解不是很深&…

SwiftUI 6.0(Xcode 16)全新 @Entry 和 @Previewable 宏让开发妙趣横生

概览 如火如荼的 WWDC 2024 已进入第五天&#xff0c;苹果开发平台中众多海量新功能都争先恐后的喷薄欲出。 在这里就让我们从中挑两个轻松有趣的新功能展示给小伙伴们吧&#xff1a;它们分别是 全新的 Entry 和 Previewable 宏。 在本篇博文中&#xff0c;您将学到如下内容&a…

WEB基础--Mybatis

了解Mybatis 什么是Mybatis 市面上最流行的技术架构&#xff1a;SSM 他们代表了 Spring业务层框架&#xff0c;SpringMvc WEB层框架以及MyBatis数据库持久层框架。 MyBatis 作为一个数据库持久层框架&#xff0c;是基于ORM规范(对象关系映射) 。类似我们以前的JDBC 和 JPA。…

DzzOffice集成功能最丰富的开源PHP+MySQL办公系统套件

DzzOffice是一套开源办公套件&#xff0c;旨在为企业和团队提供类似“Google企业应用套件”和“微软Office365”的协同办公平台。以下是对DzzOffice的详细介绍&#xff1a; 主要功能和应用&#xff1a; 网盘&#xff1a;支持企业、团队文件的集中管理&#xff0c;提供文件标签…

memory动态内存管理学习之shared_ptr

此头文件是动态内存管理库的一部分。std::shared_ptr 是一种通过指针保持对象共享所有权的智能指针。多个 shared_ptr 对象可持有同一对象。下列情况之一出现时销毁对象并解分配其内存&#xff1a; 最后剩下的持有对象的 shared_ptr 被销毁&#xff1b;最后剩下的持有对象的 s…

PID_Compact指令博图仿真

一、PID_Compact 指令管脚介绍 做仿真前&#xff0c;肯定要对主角有一定了解才能够按我们需要的去控制。 主要管脚介绍&#xff1a; 输入参数&#xff1a; setpoint&#xff1a;自动模式下的用户设定值&#xff1b; input&#xff1a;实际反馈值&#xff0c;非模拟量&#x…

[Linux] TCP协议介绍(2): TCP协议的“三次握手“过程分析、超时重传机制介绍...

上一篇文章中, 已经介绍了TCP协议的数据格式, 简单分析了其与UDP协议 关于可靠性方面的差异 本篇文章, 介绍分析一下 使用TCP协议通信, 非常重要的一个过程: 三次握手 TCP的"三次握手" TCP协议是有连接的传输层协议, 即使用TCP协议通信, 是需要建立连接的 TCP协议…

【LeetCode 动态规划】买卖股票的最佳时机问题合集

文章目录 1. 买卖股票的最佳时机含冷冻期 1. 买卖股票的最佳时机含冷冻期 题目链接&#x1f517; &#x1f34e;题目思路&#xff1a; &#x1f34e;题目代码&#xff1a; class Solution { public:int maxProfit(vector<int>& prices) {int n prices.size();ve…

快手爬票概述

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 无论是出差还是旅行&#xff0c;都无法离开交通工具的支持。现如今随着科技水平的提高&#xff0c;高铁与动车成为人们喜爱的交通工具。如果想要知道…

代码随想录二刷DAY1~3

Day1 704 二分查找&#xff0c;简单 我也有自己写题解的能力了&#xff0c;而且思维很清晰&#xff1a; 找什么就在if里写什么。 class Solution {public: int search(vector<int>& nums, int target) { int l0,rnums.size()-1; while(l<r){ …

【计算机网络】已解决:“‘ping‘ 不是内部或外部命令,也不是可运行的程序或批处理文件”报错

文章目录 一、问题分析背景二、可能出错的原因三、错误代码示例四、正确解决方法与示例五、注意事项 已解决“‘ping’ 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件”报错 一、问题分析背景 在Windows操作系统中&#xff0c;ping 命令是一个常用的网络诊断…

动态规划的递归写法和递推写法详解

目录 动态规划的概念 动态规划的递归写法 动态规划的递推写法 动态规划的概念 动态规划是一种用来解决一类最优化问题的算法思想。简单来说&#xff0c;动态规划将一个复杂的问题分解成若干个子问题&#xff0c;通过综合子问题的最优解来得到原问题的最优解。需要注意的是&…

【stm32-新建工程】

stm32-新建工程 ■ 下载相关STM32Cube官方固件包&#xff08;F1&#xff0c;F4&#xff0c;F7&#xff0c;H7&#xff09;■ 1. ST官方搜索STM32Cube■ 2. 搜索 STM32Cube■ 3. 点击获取软件■ 4. 选择对应的版本下载■ 5. 输入账号信息■ 6. 出现下载弹框&#xff0c;等待下载…

Codeforces Round 953 (Div. 2)(A~D题解)

这次比赛是我最顺利的一次比赛&#xff0c;也是成功在中途打进前1500&#xff0c;写完第三道题的时候也是保持在1600左右&#xff0c;但是后面就啥都不会了&#xff0c;还吃了点罚时&#xff0c;虽说如此也算是看到进步了&#xff0c;D题学长说很简单&#xff0c;但是我当时分析…

如何实现“变”CF而不变有效值

存在一些特殊需求,需要在保证有效值不变的情况下,“改变”正弦波的峰值因数(CF),如图,由绿色波形变为灰色波形: 正常的正弦波为 f ( t ) = 2 A ⋅ s i n ( 2 π T t ) f(t)=\sqrt{2}A\cdot sin(\frac{2\pi}{T}t) f(t)=2 ​A⋅sin(T2π​t) ,CF值为 2 \sqrt{2} 2 ​ …