gpt4 book ai didi

c++ - C++ 中的 nothrow delete 是什么?

转载 作者:可可西里 更新时间:2023-11-01 15:46:05 24 4
gpt4 key购买 nike

This MSDN page提到没有 newdelete 的抛出版本。 nothrow new 是众所周知的事情 - 如果内存分配失败,则返回 null 而不是抛出异常。但是那里提到的nothrow delete是什么?

最佳答案

他们可能指的是原始内存分配函数 operator newoperator delete

当您调用特定版本的放置新表达式(即带有额外参数的新表达式;它们都正式称为 new放置形式)和内存分配函数 operator new 成功,但由于某些其他原因(构造函数抛出)稍后进程失败,实现必须中止进程并通过调用适当版本的 运算符删除。在这种情况下,operator delete 的“适当版本”是与之前用于内存分配的 operator new 函数具有相同参数集的版本(除了第一个当然是参数)。

这也适用于 operator newnothrow 版本。当您使用 nothrow 形式的 new 表达式时,它会调用 operator newnothrow 版本,然后在分配的内存中构造对象。如果构造函数失败(抛出),new 表达式的实现将在 nothrow 版本的 operator delete 的帮助下释放分配的内存。这基本上是此版本 operator delete 存在的唯一原因。

换句话说,operator deletenothrow 版本的存在是为了非常具体的内部目的。你通常不应该自己调用它,也许你真的不需要知道它的存在。然而,值得注意的是,由于上述原因,每当您创建自己的带有额外参数的 operator new 版本时,最好提供一个匹配版本的 operator delete 具有相同的一组额外参数。

关于c++ - C++ 中的 nothrow delete 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1960740/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com