new[]与delete[]

(要理解之前关于new,delete的一些概念,看​​​​​​

CSDN)

引子:

相比new,new[]不仅仅是个数的增加,还有int大小记录空间的创建,

下图中错误的用模拟多个new来替代new[],释放步骤一样。

为什么按照new的逻辑写,并且正常全部析构会析构那么多次?

一,operator new[]

new的底层是operator new与构造函数,operator new的底层是malloc与异常识别

delete的底层是析构函数与operator delete,operator delete的底层是free与异常识别

operator new[]的底层是operator new[]与所有对象的构造,operator new[] 的底层是operator new,和数组个数记录空间创建操作

operator delete[]的底层是所有对象的析构与operator delete[],operator delete[]底层是operator delete和指针记录空间的跳转和后移操作

---------------------------------------------------------------------------------------------------------------------------------

operator new[ ]实质做的:(加上构造为new[ ]做的)

delete[ ]实质做的:

---------------------------------------------------------------------------------------------------------------------------------

对引子的解答:

new只比malloc多了个异常检测,不会额外开辟空间告诉delete[]要析构的次数,(其目的本也就是定义构造单个对象),所以,再调delete[],依然会向前int大小空间找析构次数,这没初始化的空间当然是随机值,可能很大可能很小,谁知道delete[]会析构多少次。

总结:new,delete最好对单个对象使用。

new[],delete[]对多对象使用,防止莫名奇妙的bug。(new[],delete[]该凑一对儿)

---------------------------------------------------------------------------------------------------------------------------------

malloc,free,new,delete,new[],delete[]可以混用的总结:(最好不要)

(内置类型和自定义类型中只有内置类型)且不需初始化:malloc,free,new,delete,new[]这几个可以混用,但不能使用异常检测,可能new[]会浪费空间。(要搞单个还是数组从中选)

自定义类型无要释放的资源要初始化(可参考我的另一篇):new,delete,new[]。

--->这些只是没有问题,但写这样代码很丢人,别用。

建议:

单个:new,delete

多个:new[],delete[]

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

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

相关文章

Git 原理及使用 (带动图演示)

文章目录 🌈 Ⅰ Git 安装🌙 01. Linux - centos 🌈 Ⅱ Git 工作区、暂存区和版本库🌙 01. 认识工作区、暂存区和版本库🌙 02. 使用 Git 管理工作区的文件 🌈 Ⅲ Git 基本操作🌙 01. 创建本地仓库…

Java客户端如何直接调用es的API

Java客户端如何直接调用es的API 一. 问题二. withJson 前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 一. 问题 今天做项目的时候,想要直接通过java客户端调用es的api…

docker的安装以及docker中nginx配置

机器 test3 192.168.23.103 1机器初始化配置 1.1关闭防火墙,清空防火墙规则 systemctl stop firewalld iptables -F setenforce 01.2部署时间同步 yum install ntp ntpdate -y1.3安装基础软件包 yum install -y wget net-tools nfs-utils lrzsz gcc gcc-c make…

2023年网络安全行业:机遇与挑战并存

2023年全球网络安全人才概况 根据ISC2的《2023年全球网络安全人才调查报告》,全球的网络安全专业人才数量达到了550万,同比增长了8.7%。然而,这一年也见证了网络安全人才短缺达到了历史新高,缺口数量接近400万。尤其是亚太地区&am…

【Linux学习】Linux调试器-gdb使用

这里写目录标题 🌂背景🌂gdb使用🌂指令总结: 🌂背景 程序的发布方式有两种,debug模式和 release模式 其中,debug模式是可以被调试的,到那时release模式是不能被调试的; …

用Nest实现对数据库的增删改查~

概述 为了与 SQL和 NoSQL 数据库集成,Nest 提供了 nestjs/typeorm 包。Nest 使用TypeORM是因为它是 TypeScript 中最成熟的对象关系映射器( ORM )。因为它是用 TypeScript 编写的,所以可以很好地与 Nest 框架集成。 TypeORM 提供了对许多关系数据库的支…

数据库主从复制

一、主从复制概述 1、介绍: 主从复制是指将主数据库的 DDL 和 DML 操作写入到二进制日志中,将二进制日志传送到从库服务器,然后在从库上对这些日志重新执行(重做),从而使得从库和主库的数据保持同步。 M…

护眼台灯哪个牌子好?排名靠前的护眼台灯十大排名推荐!

护眼台灯哪个牌子好?目前,书客、松下、飞利浦等品牌备受关注。急需护眼的朋友,先不必焦虑。护眼台灯的选择,同样需要细致考虑,不是简单地亮起来就足够护眼。因为不当的光线可能对眼睛造成微妙而长远的伤害,…

怎样快速打造二级分销小程序

乔拓云是一个专门开发小程序模板的平台,致力于帮助商家快速上线自己的小程序。通过套用乔拓云提供的精美模板,商家无需具备专业的技术背景,也能轻松打造出功能齐全、美观大方的小程序。 在乔拓云的官网,商家可以免费注册账号并登录…

火力发电资质升级,河南企业申报周期一览

河南企业申报火力发电资质从丙级升级到乙级的周期,通常是一个涉及多个环节和因素的复杂过程。因此,具体的申报周期会因企业的实际情况、申报材料的准备情况、审批部门的工作效率等多种因素而有所差异。 一般来说,整个升级周期可能包含以下步骤…

【团体程序设计天梯赛】L2-052 吉利矩阵

思路: 直接回溯枚举每一个位置填的数,二维肯定是不方便的,我们转成一维,下标x从0到n*n-1。二维数组下标从0到n-1,在一维中下标为x的点在二维中对应行是x/n,列是x%n。 每个数最小能填的是0,最大…

米家风扇拆解大全方案展示

随着科技的飞速进步,小家电设备逐渐向着智能化、便捷化的方向发展。在这个过程中,Type-C接口以其高效、易用的特点,正日益成为小家电领域的主流充电接口。然而,由于Type-C接口的种类繁多,设备在识别和使用不同充电方式…