当前位置: 首页 > 知识库问答 >
问题:

为什么C++中存在delete[]语法?

韦德厚
2023-03-14

共有1个答案

鲜于海
2023-03-14

C++中的对象经常有需要在其生存期结束时运行的析构函数。delete[]确保调用数组每个元素的析构函数。但这样做有未指定的开销,而delete没有。一个用于数组,它支付开销,一个用于单个对象,它不支付开销。

为了只有一个版本,一个实现需要一个机制来跟踪关于每个指针的额外信息。但是C++的一个基本原则是,用户不应该被迫付出他们不一定要付出的代价。

始终删除新建的和始终删除[]新建的[]。但在现代C++中,newnew[]通常不再使用。使用std::make_uniquestd::make_sharedstd::vector或其他表达能力更强、更安全的替代方法。

 类似资料:
  • 每当有人在这里询问关于的问题时,总会有一个相当笼统的回答:“C++就是这么做的,使用delete[]”。作为一个普通的C背景,我不明白为什么需要一个不同的调用。 使用/,您的选项是获取一个指向连续内存块的指针,并释放一个连续内存块。在实现land中会出现一些东西,并知道您根据基址分配的块的大小,以便在您必须释放它时使用。 没有函数。我看到过一些与此切线相关的其他问题的疯狂理论,比如调用只会释放数组

  • 问题内容: 为什么存在MaxPermSize? 问题答案: 我还没有发现任何东西可以表明他们为什么要做出设计来对永久发电量有最大限制的决定。但是我认为这样做是出于几个原因。 它使实现起来更加容易,GC绝对是不平凡的,因此以任何方式简化实现可能是一个好主意。 YAGNI(您可能会需要它)大多数应用程序都加载固定数量的类,并且通常不是特别大,因此它们可能已针对常见情况进行了优化,并选择了合理的默认值并

  • 我们的软件正在通过一个从内存流读取数据的GZipStream解压某些字节数据。这些数据以4KB的块解压缩,并写入另一个内存流。 我们已经意识到进程分配的内存远高于实际解压的数据。 示例:具有2425536字节的压缩字节数组被解压缩为23050718字节。我们使用的内存分析器显示了方法MemoryStream。设置容量(Int32值)分配的67104936字节。这是保留内存和实际写入内存之间的2.9

  • 需要您的帮助,我不明白为什么会出现以下错误,我不是专业的postgresql开发人员。。 正如你可以看到创建的函数,那么为什么函数不存在? 错误:函数logintry(未知,未知,带时区的时间戳,整数)不存在第1行:选择logintry('Jon.Jones88@gmail.com','_@kjhfdb987',...^HINT:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。SQL

  • 主要内容:文件流我们对文件的概念已经非常熟悉了,比如常见的 Word 文档、txt 文件、源文件等。文件是数据源的一种,最主要的作用是保存数据。 在操作系统中,为了统一对各种硬件的操作,简化接口,不同的硬件设备也都被看成一个文件。对这些文件的操作,等同于对磁盘上普通文件的操作。例如: 通常把显示器称为标准输出文件,printf 就是向这个文件输出数据; 通常把键盘称为标准输入文件,scanf 就是从这个文件读取数

  • 问题内容: 我们注意到,用C#(或Java)开发的软件中的许多错误都导致NullReferenceException。 为什么在语言中甚至包含了“ null”? 毕竟,如果没有“ null”,那么我就不会有错误,对吧? 换句话说,如果没有null,该语言的什么功能将无法正常工作? 问题答案: “ C#父亲” Anders Hejlsberg在他的《计算机世界》采访中谈到了这一点: 例如,在类型系统