详解c++:new和delete
文章目录
- 前言
- 一、new和malloc
- new的用法(爽点)
- 自动构造
- delete和free
- delete的用法(爽点)
- 提醒
前言
提示:这里可以添加本文要记录的大概内容:
在C++中,new 和 delete 是两个非常重要的操作符,它们用于在堆(heap)上动态地分配和释放内存。这是与在栈(stack)上自动分配内存(例如,通过局部变量)或全局/静态分配内存(例如,全局变量或静态变量)的主要区别。使用堆内存可以让你在程序运行时根据需要动态地分配任意大小的内存块,并在不再需要时显式地释放这些内存块。下面我将全面且深刻的讲解new和delete且与malloc和free比较
提示:以下是本篇文章正文内容,下面案例可供参考
一、new和malloc
在c语言中我们创建空间是用malloc而malloc是一个函数而new是一个操作符在用法上也有很大的不同malloc要自己创建空间大小而new会自己创建,malloc创建空间时不会初始化而new会初始化这样的差别有很多我们通过一些简单的列子来做比较
//mallocint *i = (int*)malloc(sizeof(int));//newint* i = new int;
同样是创建一个int指针i单从打字的角度可以看出new的方便,但是这不单单是只有这么一小点差别哦,new的爽点还没开始
new的用法(爽点)
在malloc的使用中我们需要将它单独拿出来但是在new中却不用这么麻烦可以直接赋值
//mallocint *i = (int*)malloc(sizeof(int));*i = 9;//newint *i=new int(9);
在new中可以直接在new后面确定空间的类型比如说int再在后面加它的值(9),这一个可能你没有感觉但是如果你有多个需要你赋值的空间呢?
多个空间赋值
//malloc
int *i = (int*)malloc(10 * sizeof(int)); if (i == NULL) { printf("内存分配失败\n"); return 1; // 返回一个错误码 } for (int j = 0; j < 10; j++) { i[j] = j ; } //newint* i = new int[10] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};//明显new的用法更爽(new也可以用for循环来赋值)
对于多个值的赋予new可以直接用大括号加值来赋予(单独的值可以直接用小括号来赋予值详细可以看上面的列子),并且不知道你是否注意到了new没有判断是否空间赋值成功,这是因为new会自动判断并报错空间不足你可以用这段代码来看看它的自动报错注意使用x86环境(不是博主不给贴图只是它不给我报错啊,空间一直足够我都用到 i21了第一次对堆的大小有了直观感受,要知道这一个 i 就是41,943,040 字节啊,不要说是已经出错了我将它的地址给打印出来的)
自动判断空间大小并报错
int* i = new int[1024*1024*10] ;int* i1 = new int[1024 * 1024 * 10];int* i2 = new int[1024 * 1024 * 10];int* i3 = new int[1024 * 1024 * 10];int* i4= new int[1024 * 1024 * 10];int* i5 = new int[1024 * 1024 * 10];int* i6= new int[1024 * 1024 * 10];
(在执行这段代码时如果你有幸看到了报错信息还请发一下图片在评论区)比如这段代码
class text
{public:text(){cout << "text" << endl;}~text(){cout << "~text" << endl;}
private:
};
int main()
{text *a=new text ;delete a;}
它会创建一个text类

自动构造
在使用类的时候我们无法用malloc来创建一个类但是new却可以
delete和free
在c语言中我们释放空间时用的是free但是用free时总是要把它定义成空指针非常麻烦所以delete来了
delete的用法(爽点)
delete是不需要将你开辟的空间定义为空的它会自动析构比如
#include<iostream>int* i = new int(3);cout << i << endl;cout << *i << endl;delete (i);cout << i << endl;cout << *i << endl;
它的运行结果是这样的
可以看出它已经将值自动消除且将它的地址归于系统了,这对于资源管理和防止内存泄漏至关重要。 但是free就需要你苦兮兮的将值归0且要将它定为NULL
提醒
malloc和free是一对而new和delete是一对不要将它们拆散也不要将它们错误匹配
相关文章:
详解c++:new和delete
文章目录 前言一、new和mallocnew的用法(爽点)自动构造 delete和freedelete的用法(爽点) 提醒 前言 提示:这里可以添加本文要记录的大概内容: 在C中,new 和 delete 是两个非常重要的操作符&am…...
【深度学习】(5)--搭建卷积神经网络
文章目录 搭建卷积神经网络一、数据预处理1. 下载数据集2. 创建DataLoader(数据加载器) 二、搭建神经网络三、训练数据四、优化模型 总结 搭建卷积神经网络 一、数据预处理 1. 下载数据集 在PyTorch中,有许多封装了很多与图像相关的模型、…...
边学英语边学 Java|Synchronization in java
Why use Java Synchronization? Java Synchronization is used to make sure by some synchronization method that only one thread can access the resource at a given point in time. Java 同步用于确保通过某种同步方法,在给定的时间点只有一个线程可以访问资…...
k8s StorageClass 存储类
文章目录 一、概述1、StorageClass 对象定义2、StorageClass YAML 示例 二、StorageClass 字段1、provisioner(存储制备器)1.1、内置制备器1.2、第三方制备器 2、reclaimPolicy(回收策略)3、allowVolumeExpansion(允许…...
3D Slicer医学图像全自动AI分割组合拳-MONAIAuto3DSeg扩展
3D Slicer医学图像全自动AI分割组合拳-MONAIAuto3DSeg扩展 1 官网下载最新3D Slicer image computing platform | 3D Slicer 版本5.7 2 安装torch依赖包: 2.1 进入安装目录C:\Users\wangzhenlin\AppData\Local\slicer.org\Slicer 5.7.0-2024-09-21\bin࿰…...
分布式光伏的发电监控
国拥有丰富的清洁可再生能源资源储量,积极开发利用可再生能源,为解决当前化石能源短缺与环境污染严重的燃眉之急提供了有效途径[1]。但是可再生能源的利用和开发,可再生能源技术的发展和推广以及可再生能源资源对环境保护的正向影响ÿ…...
微信小程序----日期时间选择器(自定义时间精确到分秒)
目录 页面效果 代码实现 注意事项 页面效果 代码实现 js Component({/*** 组件的属性列表*/properties: {pickerShow: {type: Boolean,},config: Object,},/*** 组件的初始数据*/data: {pickerReady: false,// pickerShow:true// limitStartTime: new Date().getTime()-…...
3D生成技术再创新高:VAST发布Tripo 2.0,提升AI 3D生成新高度
随着《黑神话悟空》的爆火,3D游戏背后的AI 3D生成技术也逐渐受到更多的关注。虽然3D大模型的热度相较于语言模型和视频生成技术稍逊一筹,但全球的3D大模型玩家们却从未放慢脚步。无论是a16z支持的Yellow,还是李飞飞创立的World Labsÿ…...
ONNX Runtime学习之InferenceSession模块
ONNXRuntime库学习之InferenceSession(模块) 一、简介 onnxruntime.InferenceSession 是 ONNX Runtime 中用于加载和运行 ONNX 模型的核心模块。它提供了一种灵活的方式来在多种硬件设备(如 CPU、GPU)上执行 ONNX 模型推理。通过 InferenceSession&…...
【TS】TypeScript内置条件类型-ReturnType
ReturnType 在TypeScript中,ReturnType 是一个内置的条件类型(Conditional Type),它用于获取一个函数返回值的类型。这个工具类型非常有用,特别是当你需要引用某个函数的返回类型,但又不想直接写出那个具体…...
【c语言数据结构】超详细!模拟实现双向链表(初始化、销毁、头删、尾删、头插、尾插、指定位置插入与删除、查找数据、判断链表是否为空)
特点: 结构:指向前一结点指针数据指向后一结点指针由于循环,尾结点的下一结点next指向头结点(哨兵结点)空的双向链表只有自循环的哨兵结点(头结点) 模拟实现双向链表 LIST.h #define _CRT_…...
第十四届蓝桥杯嵌入式国赛
一. 前言 本篇博客主要讲述十四届蓝桥杯嵌入式的国赛题目,包括STM32CubeMx的相关配置以及相关功能实现代码以及我在做题过程中所遇到的一些问题和总结收获。如果有兴趣的伙伴还可以去做做其它届的真题,可去 蓝桥云课 上搜索历届真题即可。 二. 题目概述 …...
(k8s)kubernetes集群基于Containerd部署
资源列表 基础环境 一、基础环境准备 1.1、关闭Swap分区 1.2、添加hosts解析 1.3、桥接的IPv4流量传递给iptables的链 二、准备Containerd容器运行时 2.1、安装Containerd 2.2、配置Containerd 2.3、启动Containerd 三、部署Kubernetes集群 3.1、安装Kubeadm工具 3.2、…...
python内置模块pathlib.Path类操作目录和文件
python自带的pathlib模块提供了很多路径相关的功能,而pathlib.Path 是pathlib 模块中的一个核心类,它代表了文件系统中的一个路径,实现功能比如创建、删除、移动文件,读取和写入文件内容,遍历目录等。 Path 类跟os.pa…...
react开发环境搭建
文章目录 准备工作创建 React 项目使用 create-react-app 创建 React 项目使用 Vite 创建 React 项目启动项目效果安装出现的情况 react项目文件讲解1. 项目根目录2. 其他可能的目录和文件3. 配置文件 准备工作 Node.js 安装方法: 方式一:使用 NVM 安装…...
python 逻辑语句简记
什么语言都少不了逻辑处理语句的使用,python的逻辑处理语句有自身的使用特点,稍稍总结记录一下 一、断言 assert 条件 条件触发,程序执行中断 二、条件语句 if 条件: 执行内容 三、循环语句 while 条件: 循环体…...
8.进销存系统(基于springboot的进销存系统)
目录 1.系统的受众说明 2.开发技术与环境配置 2.1 SpringBoot框架 2.2 Java语言简介 2.3 MySQL环境配置 2.4 idea介绍 2.5 mysql数据库介绍 2.6 B/S架构 3.系统分析与设计 3.1 可行性分析 3.1.1 技术可行性 3.1.2 操作可行性 3.1.3经济可行性 3.4.1 数据库…...
深入理解主键回显:提升数据操作效率与准确性
在软件开发的世界中,主键回显是一个常常被提及但又容易被忽视其重要性的概念。今天,我们就来深入探讨一下主键回显的奥秘。 一、什么是主键回显? 在数据库设计中,主键是用于唯一标识表中每一行记录的字段。而主键回显࿰…...
springboot+阿里云物联网教程
需求背景 最近有一个项目,需要用到阿里云物联网,不是MQ。发现使用原来EMQX的代码去连接阿里云MQTT直接报错,试了很多种方案都不行。最终还是把错误分析和教程都整理一下。 需要注意的是,阿里云物联网平台和MQ不一样。方向别走偏了。 概念描述 EMQX和阿里云MQTT有什么区别…...
QT Creator cmake 自定义项目结构, 编译输出目录指定
1. 目的 将不同的源文件放到不同的目录下进行管理, 如下: build: 编译输出目录 include: 头文件目录 rsources: 资源文件目录 src: cpp文件目录 2. 创建完cmake工程后修改CMakeLists.txt 配置 注 : 这里头文件目录是include, 所以在includ…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
