c++中的 delete

关于C++中的delete[] 和 new[] 操作符的讨论 关于C++中的delete[] 和 new[] 操作符的讨论 文章目录关于C++中的delete[] 和 new[] 操作符的讨论起因实践第一次实验问题第二次实验第三次实验第四次实验第五次实验探究猜想对C++的看法C++为什么没有数组越界检测我们该使用 new[] 和 delete[] 吗附录参考资料写第一篇博客的感受共同进步 起因 最近一直在看 《C++程序设计》 ,不得不说华章推出的**“黑皮书”系列质量是真的高。在这本书的“动态内存管理“**这一章里,有以下代码: double *array = ne 阅读详情

关于c++中的delete一直有几个问题比较迷惑,网上搜集了一些资料。记录下来。

1.delete p 之后为什么要 p=NULL;

首先,C++标准规定:delete空指针是合法的,没有副作用。

但是,delete p后,p并不会自动被置为NULL
问题来了,对一个非空指针delete后,若没有赋NULL,若再次delete的话,有可能出现问题。

如下代码
int *p = new int[4];

delete p;

delete p;


用VC编译运行将出现问题。


将其改为:

int *p = new int(3);
delete p;
p = NULL;
delete p;

则不会出现问题(因为delete空指针是合法的)


所以,为了避免出现问题,指针被delete之后应该赋值NULL


2.delete p 与 delete [ ] p 的区别。

   delete和delete[]的差别,在数组元素是一个对象的时候,就可以体现出来。
delete一般情况下,只会永远开始地址那个对象的析构函数,而delete[]可以调用数组中所有对象的析构函数。 


对于简单的数据类型而言,delete和delete[]都只是释放内存,没有什么区别。如下:
int *p = new int[4];


delete p;

与delete p [ ];

结果是一样的。

C++中的delete与delete[] 本文摘编自https://www.cnblogs.com/charley_yang/archive/2010/12/08/1899982.html C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]。简单来说就是使用delete释放单个对象,使用delete[]释放数组对象。 关于 new[] 和 delete[],其中又分为两种情况: 为基本数据类型分配和回收空间; 为自定义类型分配和回收空间。 下. 阅读详情

相关推荐

C++ 中的 new/delete 和 new[]/delete[]

在 C++ 中,你也许经常使用 new 和 delete 来动态申请和释放内存,但你可曾想过以下问题呢? new 和 delete 是函数吗? new [] 和 delete [] 又是什么?什么时候用它们? 你知道 operator new 和 operator delete 吗? 为什么 new [] 出来的数组有时可以用 delete 释放有时又不行? … 如果你对这些问题都有疑问的话,不妨...

希望我的博客,能帮上你解决学习中工作中所遇到的问题 444

C++指针delete是否需要判空

这是个老话题了,大家都知道在C++语言中delete一个空指针是安全的。但今天我想讨论的并不是C++标准是否支持delete空指针的操作。且听我慢慢道来... 前几天的检视同事的代码时,发现了一个内存泄露,大体如下: if(NULL != b.p) { a.p

nlqlove的专栏 5484

双硬盘下Ubuntu 16.04与Win10双系统的安装

之前写过一个双系统安装过程,今天再次整理的原因是想重点强调双硬盘的区别。标红的一定要注意看,那就是我自己一步一步踏出来的坑啊...   基础步骤就不再重复,重点讲区别,需要看详细步骤的童鞋(或者你只有一个硬盘)请看我上一篇博客https://blog.youkuaiyun.com/weixin_40308540/article/details/80157444   区别:双硬盘和单硬盘的区别是什么呢?...

不吃包子 1124

C++ 中delete空指针

今天写了一些代码给同事review的时候,同事指出我有一个地方对空指针指针的判断是不必要的。记录在此作为提醒。 局部的代码是这样的 这里matches是一个指针,很明显在下面的delete maches代码前面我去判断了matches是否为空,事实上这是不必要的,delete操作符已经对指针是否为空做过判断了(参见:C++ Primer第三版340页)。 实际上g++中一个delete的实现是这样的: 我们可以看到delete已经判断过指针是否为空了。 ——————————————...

weixin_38070782的博客 1137

无人机上下通信信号解析程序和代码

总的来说,无人机上下行信号解析是无人机系统中非常重要的一部分,它关系到无人机的飞行控制和图像传输能力,对于保障无人机的飞行安全和数据传输质量具有重要作用。3. 读取和解析地面控制中心发送的命令和数据:程序还需要能够读取地面控制中心发送给无人机的命令和数据。1. 读取和解析无人机发送的命令和数据:程序需要能够读取无人机发送的信号,并解析其中的命令和数据。4. 将解析结果传递给无人机:解析地面控制中心发送的命令和数据后,程序需要将解析结果传递给无人机。具体的实现方式可以根据无人机的通信协议和硬件设备来确定。

2401_84824274的博客 2190

【YOLOv11多模态涨点改进】独家创新首发 | TGRS 2025 | 引入CDFIM跨模态差异特征交互模块,通过差异特征提取和融合增强机制,减少了冗余信息,显著提升了小目标的检测精度,高效涨点改进

🔥本文给大家介绍使用 CDFIM跨模态差异特征交互模块改进 YOLOv11多模态目标检测,通过有效的差异特征提取和增强,显著提升了小目标的检测精度,特别是在复杂背景和低对比度环境下。该模块通过残差加法和通道与空间注意力机制,增强了可见光与红外模态之间的互补特征交互,减少了冗余信息,提高了检测稳定性。尽管提升了特征交互,CDFIM 仍保持轻量化设计,计算开销和参数量较低,适合实时检测应用。总的来说,CDFIM 模块在保留原始模态信息的同时优化了特征融合,有效提高了 YOLO 在多模态目标检测中的鲁棒性和精度

Ai缝合怪、助力小伙伴高效发论文 132

关于delete free 与 null

delete null; free(null); 这样写是合法的,但是原则上不要写出这样的代码, 最好是先判空再对指针进行释放(注:主要是为了可读性和可维护性).

boshuzhang的专栏 725

2025.05.28【读书笔记】|如何用SILVA和RFAM数据库高效去除rRNA污染

摘要: 在Ribo-seq等测序数据分析中,清除rRNA污染对结果准确性至关重要。仅使用SILVA数据库可能遗漏5S rRNA污染,建议结合RFAM数据库(特别是RF00001家族)全面清除。操作要点包括:下载两库序列、将RNA碱基U替换为DNA的T、合并序列建立索引,使用bowtie2过滤rRNA reads。注意U/T转换是关键,否则会导致比对失败。该方法能有效提升数据清洁度,为后续分析奠定基础。

980

【反复锤炼】指针

指针变量里存放地址,地址里的内容是真正的数据 1. 指针概念 int i=30; char a='t'; int* pi; 指针也是变量 在32位系统中,指针的宽度是4字节宽(32bit) pi = &i; 把i地址的编号赋值给pi cout<<*pi;//地址的内容 cout<<pi;//地址,&i 如何看指针类型? 众多文章都列举了各种类型的指针,对于它们的解析也很简单。 看优先级!! () > [] > * 例如: int *p[3];.

火锅底料_大伯的博客 265

TC3XX - MCAL知识点(二十四):UART MCAL配置及代码实战

UART驱动程序负责按照UART协议提供通信服务。ASCLIN模块为异步通信提供硬件支持,实现UART协议。UART驱动程序提供了配置、初始化、数据传输、接收等功能,还提供了中止传输和中止接收 abort等可选特性。软硬件匹配关系如下:UART驱动程序使用ASCLIN进行数据的传输和接收。驱动程序使用的关键硬件功能特性是:1、全双工异步工作模式2、支持半双工工作模式3、16字节的TXFIFO4、16字节的RXFIFO5、2 ~ 16位数据帧6、校验位生成/检查7、一个或两个停止位。

梦想技术家 1832

hive get_json_object解析json结果为null咋办?

最近一位开发的同学在使用get_json_object函数对json数据解析的时候,出现了结果为null的问题,问题原因是sql语法导致的,那么今天就来详细介绍一下解析json函数的用法!最后还是提醒小伙伴们,在开发过程中,一定要注意sql语法格式的书写,避免一些意想不到的结果!

笑看风云路的博客 2308

【数据结构---03】链表简述和链表的相关操作(初始化,插入,删除,查找,判空.销毁)~~~~~

目录 什么是链表和链表的分类: 链表: 概念: 数据结构中链表示意图: 无头单向非循环链表: 带头双向循环链表: 单链表逻辑结构示意图: 带头结点和不带头结点链表: 概念: 带头结点单链表: 插入操作如下 删除操作如下 统一空表和非空表的处理 不带头结点单链表: 插入操作如下 删除操作如下 统一空表和非空表的处理: 单链表基本操作: 链表初...

白小鱼的博客 1705

硬件电路RS485通信EMC 设计

RS485通讯硬件设计与STM32实现要点 本文详细介绍了RS485通讯系统的硬件设计和STM32实现方案。硬件设计重点包括:采用总线型拓扑结构、120Ω终端电阻匹配、屏蔽双绞线布线、TVS管和自恢复保险丝保护等核心要素。EMC设计强调共模电感抑制干扰、屏蔽层单端接地、光电隔离等技术。软件实现方面,提供了基于STM32F103的完整程序框架,包括UART初始化、收发控制逻辑和中断处理机制,特别强调了收发切换时机、波特率精度等关键注意事项。文中还给出了工业传感器节点的实际应用案例,展示了一个完整的EMC防护电

qq_37999850的博客 1384

C++中的delete—— C++中的new之姊妹篇

Normal 0 7.8 pt 0 2 false false false MicrosoftInternetExplorer4 <!-- /* Font

sparkliang的专栏 2392

Vins-Fusion 外参camera-imu 标定

Vins-Fusion是一种基于优化的多传感器状态估计器,一大特色是支持实时camera-imu外参校准(相机和IMU之间的旋转)。Vins-Fusion 外参camera-imu校准是利用两帧间计算相机位姿和imu预积分得到位姿,构建最小二乘问题,并通过SVD求解camera-imu外参旋转矩阵。

u010196944的博客 2490

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C++中的delete和delete[]

 一直对C++中的delete和delete[]的区别不甚了解,今天遇到了,上网查了一下,得出了结论。做个备份,以免丢失。     C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]。  关于 new[] 和 delete[],其中又分为两种情况:(1) 为基本数据类型分配和回收空间;(2

focus leepple 530

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

初探C++ 中的 new 和 delete

在 C++ 中,你也许经常使用 new 和 delete 来动态申请和释放内存,但你可曾想过以下问题呢? new 和 delete 是函数吗?new [] 和 delete [] 又是什么?什么时候用它们?你知道 operator new 和 operator delete 吗?为什么 new [] 出来的数组有时可以用 delete 释放有时又不行?… 如果你对这些问题都有疑问的话,

Tham 在思索中前行! 688

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

C++中的几种new和delete

C++中的几种new和delete 在C语言中,使用malloc、calloc来分配堆上的空间,使用free来释放它们分配的空间; malloc、calloc、free都是库函数。 在C++中,使用new和delete,以及 new [] 和 delete [] 来分配和释放自由存储区(其实也就是堆)上的空间;它们都是操作符,属于语言的范畴。 本文讨论一下C++中的几种new以及delete的作用和实现。 1. C++中默认的new和delete 默认的new和delete,就是全局的new和delete,

FinixLei的专栏 (https://github.com/FinixLei) 551

解析C++中的new、operator new、operator new[]和delete、operator delete、operator delete[](下)

注:以下测试均在VS2015下进行,其他编译器可能会有轻微差别。 继续整理第二部分的内容。 二、operator new/delete,以及其对应的数组版本new[]/delete[]。 operator new优先调用全局重载的,所以::operator new(sizeof(COperatorTest))和operator new(sizeof(COper

beyongwang的博客 2120

C++中的new, delete, new[]和delete[]

但对于不平凡的类,使用new[]申请内存时,会在第一个元素的前面记录元素的个数,当使用delete[]释放内存时,会先读取元素的个数,并调用对应次数的析构函数,最后释放内存;从上图中,我们还可以发现,栈中变量存储的顺序并不是我们定义的顺序,而是占用空间较大的变量会被存储在栈底,占用空间较小的变量会被存储在栈顶(栈的增长方向是从上往下)。直接看上面的输出结果,可能比较难以理解,根据上面的输出结果,我绘制了如下的堆栈信息图。的类型输出其中的内容,确实是为3,这也就验证了我们前面的说法,对于不平凡的类,

weixin_43364551的博客 533

C++中的new和delete

摘抄自《C++ Primer Plus》 文章目录序言使用new来分配内存使用delete来释放内存使用new来创建动态数组总结 序言 本文默认读者对C语言中的指针已经很熟悉了。我们主要谈谈C++中的new如何实现内存的管理。 使用new来分配内存 我们从一个小例子谈起。假如我们想分配一块匿名int型内存,并通过指针来访问这块内存,我们可以这样做 int *pn = new int; ne...

Shijia Yin 395

浅谈 C++ 中的 new/delete 和 new[]/delete[]

在 C++ 中,你也许经常使用 new 和 delete 来动态申请和释放内存,但你可曾想过以下问题呢? new 和 delete 是函数吗? new [] 和 delete [] 又是什么?什么时候用它们? 你知道 operator new 和 operator delete 吗? 为什么 new [] 出来的数组有时可以用 delete 释放有时又不行? … 如果你对这些问题都有疑问的话,不妨看看我这篇文章。 new 和 delete 到底是什么? 如果找工作的同学看一些面试的书,我相信都

lijian2017的博客 551
上一篇: Debug与Release
下一篇: c++虚函数的实现机制
viperlong
博客等级 码龄17年 3粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值