关于new和delete的匹配问题

目录

引入

原理


引入

     大家先看如下代码: 

class A
{
private:int _a = 0;
};int main()
{A* arr1 = new A[10];delete arr1;return 0;
}

     可以发现这里new了一个数组但却用delete释放。先看运行结果:

     可以看到程序正常结束并没有崩 ,别急我们再给它加一个析构。

class A
{
public:~A(){_a = -1;}
private:int _a = 0;
};int main()
{A* arr1 = new A[10];delete arr1;return 0;
}

     可以发现只是多了一个析构就崩了,为什么会这样?

原理

     我们先看一下数组所开辟的大小,这是没加析构:

     这是加析构:

     A类的大小是4个字节,我们开10个空间大小就应该是40个字节,通过上面的可以发现没加析构的大小和预期的一样,写析构的大小居然多出来了4个字节。

     我就直接说了那4个字节是用来存放数据的个数的。我们可以看一下它的内存。

     通过上面的图可以看出在arr1数组上面确实有一块空间大小是4个字节存放的是数据个数。编译器为这么做是因为析构一般用于资源释放,前面的数据个数就代表析构几次(如果不加前面的4个字节编译器就不知道要析构几次)。即arr1并不是开辟空间的首地址,但释放空间只能从首地址开始所以就会崩溃。

     没写析构为什么不多开这4个字节,这是因为没有写析构编译器认为这些空间没有资源可释放,它自己生成的析构函数也并不需要做什么事情然后编译器一优化就直接省略了析构,所以就arr1即使首地址这时候释放就没事。

     上面所叙述的只是对于自定义类型的问题,对于内置类型呢?

     可以看到并没有发生崩溃。但是我并不建议这样写,就正常写就行。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯3526 子树的大小 | 数学规律

题目传送门 这个题目是一个数学题,比较好的方法是从上往下寻找子树的最左和最右的结点,每层统计子结点数,到树的底部时打印结果。 如何求最左、最右的子结点呢? 对于第i个结点,其前面有i-1个结点,每个结点各有m个孩子,再加上1号结…

计算机毕业设计Python+卷积神经网络租房推荐系统 租房大屏可视化 租房爬虫 hadoop spark 58同城租房爬虫 房源推荐系统

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

Rust实现内网穿透工具:从原理到实现

目录 1.前言2.内网穿透原理3.丐版实现3.1 share3.2 server3.3 client3.4 测试4.项目优化4.1 工作空间4.2 代码合并4.3 无锁优化4.4 数据分离4.5 错误处理4.6 测试代码4.7 参数解析本篇原文为:Rust实现内网穿透工具:从原理到实现 更多C++进阶、rust、python、逆向等等教程,可…

Mysql 主从复制原理及其工作过程,配置一主两从实验

主从原理:MySQL 主从同步是一种数据库复制技术,它通过将主服务器上的数据更改复制到一个或多个从服务器,实现数据的自动同步。 主从同步的核心原理是将主服务器上的二进制日志复制到从服务器,并在从服务器上执行这些日志中的操作…

【Vue3进阶】Pinia 中的 Store 组合式写法

Hey小伙伴们!今天来给大家分享一个 Vue3 状态管理库 Pinia 中非常实用的功能——Store 的组合式写法。通过这种写法,我们可以将多个 store 进行组合和复用,使得代码更加模块化、清晰易读。 如果你对 Vue3 和 Pinia 感兴趣,或者想…

00_专栏《Redis 7.x企业级开发实战教程》介绍

大家好,我是袁庭新。Redis作为一款高性能、多用途的内存数据库,凭借其丰富的数据结构、高速读写能力、原子操作特性及发布订阅等功能,在缓存加速、分布式锁、消息队列等场景中不可或缺,极大提升了系统性能与开发效率,是现代互联网应用架构的关键组件。 你是否在学习Redis…

TensorFlow DAY3: 高阶 API(Keras,Estimator)(完)

TensorFlow 作为深度学习框架,当然是为了帮助我们更便捷地构建神经网络。所以,本次实验将会了解如何使用 TensorFlow 来构建神经网络,并学会 TensorFlow 构建神经网络的重要函数和方法。 知识点 Keras 顺序模型Keras 函数模型Keras 模型存储…

第14章:Python TDD应对货币类开发变化(一)

写在前面 这本书是我们老板推荐过的,我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后,我突然思考,对于测试开发工程师来说,什么才更有价值呢?如何让 AI 工具更好地辅助自己写代码,或许…

macOS查看当前项目的 tree 结构

文章目录 使用 tree 命令 macOS 系统默认不包含 tree 命令 使用 tree 命令 使用homebrew自动安装脚本/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"安装 tree:brew install tree查看项目的 tree 结构&#…

Python自动化:基于faker批量生成模拟数据(以电商行业销售数据为例)

引言:个人认为,“造数据”是一个数据分析师的一项基本技能,当然啦,“造数据”不是说胡编乱造,而是根据自己的需求去构造一些模拟数据集,用于测试等用途,而且使用虚拟数据不用担心数据隐私和安全…

WPS数据分析000004

目录 一、表格阅读技巧 冻结窗格 拆分窗口 新建窗口 阅读模式 护眼模式 二、表格打印技巧 打印预览 打印缩放 打印区域 打印标题 分页打印 打印位置 页眉页脚 逐份打印 三、表格保护技巧 锁定单元格 隐藏公式 文档权限 文件加密 一、表格阅读技巧 冻结窗…

【前端】CSS学习笔记

目录 CSS的简介CSS的概念语法 CSS的引入方式内联样式(行内样式)内部样式外部样式(推荐) 选择器全局选择器元素选择器类选择器ID选择器合并选择器后代选择器子选择器相邻兄弟选择器通用兄弟选择器伪类选择器:link:visited:hover:ac…

STL--set(集合)

目录 前言 set: multiset: 一、set 对象创建 1、默认构造 2、初始化列表 3、迭代器 4、拷贝构造 二、set 赋值操作 1、set对象 2、初始化列表 三、set 大小操作 1、判空 2、大小 四、set 数据插入 1、单值插入 2、多值插入 五、set 数据查找 六、set 数据删除…

SQL在线格式化 - 加菲工具

SQL在线格式化 - 加菲工具 打开网站 加菲工具 https://www.orcc.online 选择“SQL 在线格式化” 或者直接访问网址 https://www.orcc.online/tools/sql 输入sql,点击上方的格式化按钮即可 输入框得到格式化后的sql结果

50-《仙人掌》

仙人掌 仙人掌(学名:Opuntia stricta (Haw.) Haw. var. dillenii (Ker-Gawl.) Benson )是仙人掌科缩刺仙人掌的一种变种。是丛生肉质灌木,高1.5~3m。上部分枝宽呈倒卵形、倒卵状椭圆形或者是近圆形,绿色至蓝绿色&#…

【C++课程学习】:C++中的IO流(istream,iostream,fstream,sstream)

🎁个人主页:我们的五年 🔍系列专栏:C课程学习 🎉欢迎大家点赞👍评论📝收藏⭐文章 C学习笔记: https://blog.csdn.net/djdjiejsn/category_12682189.html 前言: 在C语…

【桌面程序】PyWebview跨平台桌面应用程序

什么是PyWebview PyWebView 是一个轻量级的 Python 库,用于将网页(HTML、CSS、JavaScript)嵌入到本地应用程序的窗口中。它允许你创建带有图形用户界面(GUI)的桌面应用程序,并且能够使用 Web 技术&#xf…

DDD - 整洁架构_解决技术设计困局

文章目录 Pre如何落地 DDD底层技术的更迭 整洁架构的设计主动适配器/北向适配器被动适配器/南向适配器 整洁架构的落地总结 Pre DDD - 软件退化原因及案例分析 DDD - 如何运用 DDD 进行软件设计 DDD - 如何运用 DDD 进行数据库设计 DDD - 服务、实体与值对象的两种设计思路…

Sentinel配置流控规则详解

前言 在微服务架构中,流量控制(Flow Control)是保障服务稳定性的重要手段之一。Sentinel作为一款开源的流量控制、熔断降级Java库,以其丰富的应用场景和完善的监控能力,在微服务保护中扮演了重要角色。本文将详细介绍…

C语言之文本加密程序设计

🌟 嗨,我是LucianaiB! 🌍 总有人间一两风,填我十万八千梦。 🚀 路漫漫其修远兮,吾将上下而求索。 文本加密程序设计 摘要:本文设计了一种文本加密程序,旨在提高信息安…