- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
谁能给我解释一下 C++ primer 第 5 版中的这段话:
Terminology: new Expression versus operator new Function
The library functions operator new and operator delete aremisleadingly named. Unlike other operator functions, such as operator=,these functions do not overload the new or delete expressions. In fact, wecannot redefine the behavior of the new and delete expressions.
A new expression always executes by calling an operator new functionto obtain memory and then constructing an object in that memory. A deleteexpression always executes by destroying an object and then calling anoperator delete function to free the memory used by the object.
By providing our own definitions of the operator new and operatordelete functions, we can change how memory is allocated. However, wecannot change this basic meaning of the new and delete operators.
我没有看到 operator new
或 operator delete
与任何其他重载运算符(如赋值运算符 =
)之间的区别。那么“被误导命名”是什么意思呢?我们都知道我们不会重写像 fObj + fObj
这样的表达式,但我们重载了运算符而不是表达式本身。
事实上,我发现这一段本身具有误导性。毕竟我们可以“滥用”任何可重载运算符以及从哪个运算符new
和delete
那么他在这一段中的意思是什么?谢谢!
最佳答案
C++ 中的大多数运算符不受任何显式语义或要求的约束。唯一真正的异常(exception)是 operator new
和 operator delete
,因为它的特殊用途,这就是它所指的。
例如,让我们考虑operator==
。
尽管让此运算符执行某种比较并返回 bool
以指示相等是常规(而且是明智的)——这实际上不是 C++ 语言所要求的。
事实上,实际上完全有可能定义 operator==
来返回一些完全不相关的东西——也许是一个 int
,一个 std::string
,或者像 std::tuple
这样更奇怪的东西。而且,当然,它不需要实际上执行任何比较。
实际上,C++ 中大多数运算符的语义是弱需求的约定,但不是语言。
这与 operator new
和 operator delete
形成对比。 C++ 中的 new
表达式将始终在 operator new
调用返回的指针处开始动态对象的生命周期。这是否是 new (p) T{...}
用于 placement-new 表达式,new T{...}
与 global-new
运算符,或一些 new(args,...) T{...}
用于自定义 operator new
-- 它必须返回某种形式T
开始生命周期的指针。
同样,delete
必须结束该生命周期,并调用operator delete
释放该生命周期的底层存储。这有效地迫使 operator new
和 operator delete
的语义分别执行某种形式的分配机制和某种形式的清理机制。实际上不可能定义 new
和 delete
来做一些奇怪的事情(如 operator==
的情况),因为隐含的行为调用这些运算符只会中断(如果它完全编译的话)。
这就是为什么引用中提到不能重新定义operator new
/operator delete
的行为;基本意义永远是固定的。
关于C++ 入门第 5 版 : operator new and operator delete overloading,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67409792/
从开发者的角度来看,Mac 版 Safari 和 Windows 版 Safari 有何不同? 我认为可以归结为评估两者之间的差异(如果我遗漏了什么,请更正): - 布局渲染 - Javascript
正如标题所说:Android 版 Chrome 和 iOS 版 Chrome 有什么区别。 我对两者进行了一些研究,但找不到关于该主题的任何最新信息。进行这项研究的原因是因为我正在研究某些 Web A
我有以下脚本可以获取您的地理位置并重定向您到 Google map : (function(){ navigator.geolocation.getCurrentPosition(function(p
我负责修复导航栏显示比应有的低 1 像素的问题。 查看网站后,我无法找到所报告的问题,直到我在 Mac 上进行了检查。 Firefox、Safari 等在 Mac 上运行良好,但 Chrome 是导致
我是典型的 .NET 开发人员(C# 是我的第一语言),几年前转向 ASP.NET MVC。现在是我职业生涯发生重大变化的新时期。如果我们看看 Web 开发的前景,我们可以看到新技术如何占领世界,而其
Grails 2.0 项目目前带有资源插件 1.1.5,它似乎有几个依赖问题(例如,参见 this post 的答案)。我正在使用 IntelliJ,虽然我将 BuildConfig.groovy 更
我有一个支持 android 2.3.3 的 android 项目。 但它也支持 sdk 版本 17。当我创建一个新 Activity 时,它会创建一个特定于版本 17 的 Activity 。 如何
有没有人有在 Android 设备上使用 pjsip 的经验?我看到几个非商业/测试项目使用它,所以我假设它可以完成,但没有一个有很好的记录。我认为 pjsip-jni 项目是一个不错的起点,但基本上
谁能告诉我在 Xcode (iPhone) 中执行以下操作的最佳方法是什么。 我有一个主导航屏幕,上面有一些按钮。当用户单击任何按钮时,他们将被带到带有更多选项按钮的子导航屏幕。在这里,他们单击任意一
我正在使用 JBoss Embedded beta3.SP10 版本,我正面临一个应该在某些 Hibernate 版本中修复的持久性错误。可悲的是,我不知道我的 JBoss Embedded 中使用的
我想在 android 中使用简单的 snmp get。我找到了 java 的代码并尝试在 android 中使用它。我还附加了 snmp4j.jar 文件用于 android。但是我得到了 Null
我的实现目标是: 可以通过一个或多个关键词搜索到文章。 可以通过文章的关键词列表查询到其相关文章。 查询到的结果依据相关程度降序排列。 查询速度要够快。(理论上关键词检索比全文检索要快很多的
我正在尝试创建一个允许我将视频从 iPhone 流式传输到服务器的应用程序。我目前关于如何做到这一点的理论是创建一系列 FFMpeg 文件并将它们发送到服务器。据我所知,我已经编译了 FFMpeg图书
这个问题在这里已经有了答案: Login failed in github for window (5 个回答) 7年前关闭。 当我安装 GitHub 时,我无法使用我的帐户凭据登录。 我收到错误 L
我需要在我的 iPad 项目中使用 Three20。我想知道 iPhone 版本的 Three20 项目是否可以直接在 iPad 上使用,还是应该等待这个时间线完成: http://three20.i
有人能做到吗 http://www.surina.net/soundtouch/适用于 iPhone? 简单的 Xcode 演示会很有帮助。 我只想通过一些音调操作来播放音效。谢谢克里斯 最佳答案 使
如何在iPhone中使用“speex”进行音频编码/解码?我没有在项目中添加框架。 最佳答案 这个blog entry: Compile Speex For iPhone克利夫顿·克雷格(Clifto
我想知道bonjour是公共(public)API还是私有(private)API?我们可以直接在我们的应用程序中使用它吗? 最佳答案 Bonjour 由 NSNetServices 和 CFNetS
••••• 已解决•••••该应用程序可用。只是花了一些时间才出现。我之所以将其视为测试版,是因为我的 Google 帐户用于 alpha 测试。如果您遇到同样的问题,只需从测试人员中删除您的帐户并等
我是 Android 编程初学者。 我在使用 Android 下载文件时遇到问题 我使用了 Httpost、Httpget 和 hhtpurlconnection前两个根本不起作用第三个两次无法下载
我是一名优秀的程序员,十分优秀!