当前位置: 首页 > news >正文

[知识点]c++ delete与delete[ ]

在C++中,deletedelete[] 是用于释放动态分配的内存的关键字。它们的使用取决于内存是如何分配的。具体来说:

  1. delete 用于释放通过 new 分配的单个对象。
  2. delete[] 用于释放通过 new[] 分配的数组。

如果你通过 new 分配了一个单个对象,那么你必须使用 delete 来释放它。如果你通过 new[] 分配了一个数组,那么你必须使用 delete[] 来释放它。

示例和解释

使用 newdelete

当你分配一个单个对象时,使用 newdelete

#include <iostream>int main() {// 分配一个整数int* p = new int(42);std::cout << "Value: " << *p << std::endl;// 释放分配的内存delete p;return 0;
}

在这种情况下,使用 delete 来释放通过 new 分配的内存。

使用 new[]delete[]

当你分配一个数组时,使用 new[]delete[]

#include <iostream>int main() {// 分配一个包含 10 个整数的数组int* arr = new int[10];// 初始化数组for (int i = 0; i < 10; ++i) {arr[i] = i;std::cout << arr[i] << " ";}std::cout << std::endl;// 释放分配的数组delete[] arr;return 0;
}

在这种情况下,使用 delete[] 来释放通过 new[] 分配的内存。

为什么一定要使用 delete[] 来释放数组

使用 delete 释放通过 new[] 分配的内存会导致未定义行为。这是因为 new[]delete[] 知道它们处理的是一个数组,并会调用每个数组元素的析构函数(如果有)。而 delete 只会调用单个对象的析构函数。

示例:未定义行为

以下示例展示了错误的内存释放方式,这将导致未定义行为:

#include <iostream>int main() {// 分配一个包含 10 个整数的数组int* arr = new int[10];// 错误地使用 delete 而不是 delete[]delete arr;  // 未定义行为return 0;
}

由于 delete 不能正确处理数组的内存释放,这会导致程序崩溃或其他不可预测的行为。

使用智能指针管理内存

现代 C++ 推荐使用智能指针(如 std::unique_ptrstd::shared_ptr)来自动管理内存,避免手动调用 deletedelete[]

#include <iostream>
#include <memory>int main() {// 使用 unique_ptr 自动管理单个对象std::unique_ptr<int> p(new int(42));std::cout << "Value: " << *p << std::endl;// 使用 unique_ptr 自动管理数组std::unique_ptr<int[]> arr(new int[10]);for (int i = 0; i < 10; ++i) {arr[i] = i;std::cout << arr[i] << " ";}std::cout << std::endl;return 0;
} // 在离开作用域时,p 和 arr 会自动释放所管理的内存

智能指针自动管理内存,可以避免内存泄漏和未定义行为问题。

总结

  • 使用 delete 释放通过 new 分配的单个对象
  • 使用 delete[] 释放通过 new[] 分配的数组
  • 错误地使用 delete 来释放数组会导致未定义行为
  • 智能指针(如 std::unique_ptrstd::shared_ptr)可以自动管理内存,减少手动调用 deletedelete[] 的需求

相关文章:

[知识点]c++ delete与delete[ ]

在C中&#xff0c;delete 和 delete[] 是用于释放动态分配的内存的关键字。它们的使用取决于内存是如何分配的。具体来说&#xff1a; delete 用于释放通过 new 分配的单个对象。delete[] 用于释放通过 new[] 分配的数组。 如果你通过 new 分配了一个单个对象&#xff0c;那么…...

iCloud如何被高效利用?

1.同步设备 同步设备是指利用云服务&#xff08;如iCloud&#xff09;将多台设备上的数据保持同步&#xff0c;确保这些设备上的信息始终保持一致。以下是详细说明如何同步设备使用iCloud&#xff1a; 1. 打开iCloud设置&#xff1a;在iOS设备上&#xff0c;打开“设置”应用…...

月入30000的软件测试人员,简历是什么样子的?

我们都知道&#xff0c;简历是一个人进入职场的敲门砖。从某种层面来说&#xff0c;简历也像一个人的具象身份证&#xff0c;或者专业资格证。所以&#xff0c;一份简历的好坏&#xff0c;不仅关乎个人的“脸面”&#xff0c;更关乎你是不是一个有“含金量”的技术人员。 所以…...

nginx官网源代码方式安装nginx并编译

从Nginx官网下载特定版本的源代码并编译安装的步骤如下&#xff1a; 确定需要的版本&#xff1a; 前往Nginx 官方网站下载页面&#xff0c;选择你需要的Nginx版本。 下载源代码&#xff1a; 使用wget命令下载源代码压缩包。例如&#xff0c;下载1.21.0版本的Nginx&#xff1a;…...

iOS ActivityViewController使用

UIActivityViewController是iOS中用于展示一个活动列表的视图控制器&#xff0c;允许用户通过各种内置或第三方的应用来分享内容。以下是使用UIActivityViewController分享文本内容的示例代码&#xff1a; import UIKit class ViewController: UIViewController { IBA…...

新手快速上手IDEA【常用快捷键】

目录 一、常用二、进阶&#xff08;提高编码速度&#xff09;三、其他四、查找、替换与关闭最后 一、常用 说明快捷键复制代码ctrl c粘贴ctrl v剪切ctrl x撤销ctrl z反撤销ctrl shift z保存-save allctrl s全选-select allctrl a 二、进阶&#xff08;提高编码速度&a…...

MySQL里如果有字段是function怎么查询呢?

在MySQL中&#xff0c;字段名通常不会命名为function&#xff0c;因为FUNCTION是MySQL的保留关键字&#xff0c;用于定义存储函数。但是&#xff0c;如果你确实有一个字段名叫做function&#xff08;尽管这通常不是一个好的实践&#xff09;&#xff0c;你仍然可以查询它。你只…...

从高海拔到严寒季的测量作业更要「快准稳」,怎么实现?

西藏那曲海拔4500米公路勘测项目赶工期 “必须要保障在西藏那曲地区承接的公路勘测项目赶工期需求&#xff0c;海拔高达4500米、网络通讯不足、部分范围存在无网以及地基信号覆盖可能不足的情况&#xff0c;需要能满足环境和项目需求的专业RTK设备紧急送到。” 客户的一个电话…...

WowTab:简洁界面,效率神器,重塑新标签页浏览体验

目录 一、插件简介 二、插件功能 2.1 支持两种模式切换 2.2 效率组件介绍 2.3 设置中心 三、使用总结 四、插件安装说明 4.1 Edge安装 4.2 Chrome安装 大家在日常办公当中&#xff0c;是不是觉得新标签页太平淡无奇&#xff1f;来&#xff0c;给自己的浏览器加点料&…...

PostgreSQL 17 Beta1 发布,酷克数据再次贡献核心力量

得益于全球的开发者贡献&#xff0c;PostgreSQL已成长为一款拥有众多全球用户和贡献者、成熟稳定的开源数据库。2024年5月23日&#xff0c;PostgreSQL全球开发组宣布&#xff0c;PostgreSQL 17的首个 Beta 版本现已开放下载。本次新版本带来了众多惊喜。值得一提的是&#xff0…...

CDH服务红,查看日志发现host有问题

看host后&#xff0c;发现里面节点ip都是127.0.0.1然后全部改成对应的ip&#xff0c; 1.在/etc/hosts里面全部加上了 ip以及对应的角色名称 2然后注释了127.0.0.1 hostname 3.然后重启所有的机器agent和server&#xff0c;在重新登录&#xff0c;点击重新部署。 重启agent sy…...

数据分析------统计学知识点(三)

相关性分析 1.趋势分析与散点图 散点图可帮助我们发现和理解变量间的关系&#xff0c;可直观观察是否有相关性。 &#xff08;1&#xff09;散点图定义及组成要素 散点图是一种以点的形式在直角坐标系上表示两个数值变量间关系的图表 横坐标&#xff08;x轴&#xff09;&a…...

MySQL 导出一条数据的插入语句

1.MySQL 导出一条数据的插入语句的方法 在MySQL中&#xff0c;如果我们想要导出一条数据的插入语句&#xff0c;我们可以使用SELECT ... INTO OUTFILE语句&#xff08;但这通常用于将整个表或查询结果导出到一个文件中&#xff09;&#xff0c;或者我们可以手动构建插入语句。…...

隐藏 IP 地址的重要性是什么?

在当今的数字时代&#xff0c;保护我们的在线身份至关重要。从保护个人信息到保护隐私&#xff0c;互联网用户越来越多地寻求增强在线安全性的方法。保持匿名和保护敏感数据的一个关键方面是隐藏您的 IP 地址。在这篇博文中&#xff0c;我们将深入探讨隐藏 IP 地址的重要性&…...

Oracle 19c linux安装

下载Oracle Database Preinstallation RPM&#xff0c;该包会自动下载依赖&#xff0c;创建oracle用户&#xff0c; 手动下载地址&#xff1a;https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/index.html wget http://yum.oracle.com/repo/OracleLinux/OL7/latest…...

AI音乐生成流程

suno.com...

android room数据库升级脚本常见问题

room数据库升级很容易遇到一个问题&#xff0c; java.lang.IllegalStateException: Migration didnt properly handle: Expected:xxx Found:xxx 意思是数据库执行完你编写的升级脚本后&#xff0c;发现数据库当前的表结构与你代码中的Entity class结构不一致&#xff0c;所…...

在 iCloud.com 上导入、导出或打印联系人

想将iPhone上的电话本备份一份到本地电脑上&#xff0c;发现iTunes好像只是音乐播放了&#xff0c;不再支持像电话本等功能&#xff0c;也不想通过其他第三方软件&#xff0c;好在可以通过iCloud进行导入导出。下面只是对操作过程进行一个图片记录而已&#xff0c;文字说明可以…...

JavaScript中this方法;var,let,constd区别;JSON是什么

this方法 1、在对象方法中&#xff0c; this 指向调用它所在方法的对象。 2、单独使用 this&#xff0c;它指向全局(Global)对象。 3、函数使用中&#xff0c;this 指向函数的所属者。 4、严格模式下函数是没有绑定到 this 上&#xff0c;这时候 this 是 undefined。 5、在 HT…...

Mybatis不明白?就这一篇带你轻松入门

引言&#xff1a;烧脑的我一直在烧脑的寻找资料&#xff0c;寻找网课&#xff0c;历经磨难让一个在大一期间只会算法的我逐渐走入Java前后端开发&#xff0c;也是一直在自学的道路上磕磕碰碰&#xff0c;也希望这篇文章对于也是同处于自学的你有所帮助&#xff0c;也希望你继续…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...