热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

为什么我们甚至需要删除运算符?(我们不能只使用delete[])

如何解决《为什么我们甚至需要删除运算符?(我们不能只使用delete[])》经验,为你挑选了2个好方法。

我今天正在阅读有关deletedelete[]运算符的内容,我可以看到,为了释放分配的内存myChar,我应该调用delete并释放内存,因为myCharArray我应该使用delete[].

但是我一直认为它myChar是一个指向大小为1的数组的指针.那么为什么我们delete在这种情况下使用它呢?为什么我们需要delete呢?delete[]如果myChar实际上是一个大小为1的数组,我们难道不能在任何地方使用吗?

char* myChar = new char;
char* myCharArray = new char[5];

delete myChar;
delete[] myCharArray;

Toby Speight.. 7

一个单一的对象是尺寸1.尺寸1的阵列,其中创建的阵列new char[1],需要记录中分配的对象的数目,以便delete[]知道多少对象破坏.

可以说,new 可以在内部实现new[1](并delete实现为delete[]) - 这将是一个正确的实现.但是,具有单独的new并且new[1]允许优化不存储单个对象的对象计数(非常常见的情况).

不支付你不使用的东西的C++原则在这里发挥作用.如果我们创建一个对象数组,我们支付存储计数的内存和处理价格,但是如果我们创建一个对象,我们就不会产生开销.



1> Toby Speight..:

一个单一的对象是尺寸1.尺寸1的阵列,其中创建的阵列new char[1],需要记录中分配的对象的数目,以便delete[]知道多少对象破坏.

可以说,new 可以在内部实现new[1](并delete实现为delete[]) - 这将是一个正确的实现.但是,具有单独的new并且new[1]允许优化不存储单个对象的对象计数(非常常见的情况).

不支付你不使用的东西的C++原则在这里发挥作用.如果我们创建一个对象数组,我们支付存储计数的内存和处理价格,但是如果我们创建一个对象,我们就不会产生开销.



2> Pete Becker..:

你是对的,没有内在的理由来区分new/deletenew[]/delete[]; 该语言可以简单地省略非数组版本,或者省略delete并且需要delete[]与分配的单个对象一起正常工作new.但这样做会增加单对象案例实现的复杂性和相应的开销,因为它必须在某处存储大小为1 delete[]才能做正确的事情.C++的主要设计原则之一是(并且是)您不支付您不使用的内容.new/delete是这种简约的结果.它将成本从实现转移到程序员.


推荐阅读
  • 字符串的题目用库函数往往能大大简化代码量介绍几个常用的C的字符串处理库函数strtok()原型char*strtok(chars[],constchar*delim); ... [详细]
  • 数据结构-图详解(图基本概念、图的存储结构及C++实现)
    本文主要介绍关于数据结构,c++,图论的知识点,对【数据结构-图详解(图基本概念、图的存储结构及C++实现)】和【数据结构图的存储结构代码】有兴趣的朋友可以看下由【NUC_Dodamce】投稿的技术文 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • Igotthiscode(IknowitsinSpanishIcantranslateifneeded)wheretheygivemethefunctionS ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文介绍了汉诺塔问题的迭代算法实现,通过递归的方式将盘子从一个地方搬到另一个地方,并打印出移动的顺序。详细介绍了算法的思路和步骤,以及示例代码的运行结果。 ... [详细]
author-avatar
平凡特产小店
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有