首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我怎样才能明智地重载放置操作符new?

我怎样才能明智地重载放置操作符new?
EN

Stack Overflow用户
提问于 2010-09-09 16:47:46
回答 9查看 12.7K关注 0票数 22

C++允许重载operator new -全局的和每个类的-通常的operator newoperator new[]分别与new[]语句和放置operator new一起使用。

这三种方法中的前两种通常会因为使用自定义分配器和添加跟踪而超载。但是placement operator new看起来非常简单--它实际上不做任何内部的事情。例如,在Visual C++中,默认实现只返回传递给调用的地址:

代码语言:javascript
运行
复制
//from new.h
inline void* operator new( size_t, void* where )
{
   return where;
}

它还能做什么呢?为什么以及如何明智地重载放置operator new

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2010-09-09 21:45:45

正确的答案是,你不能替换运算符放置新的。

§18.4.​1.3放置表单

这些函数是保留的,C++程序不能定义取代标准C++库中的版本的函数。

基本原理:分配和释放操作符的唯一目的是分配和释放内存,所以当给定内存时,不应该再做任何事情。(该标准特别指出,这些函数“故意不执行任何其他操作”。)

票数 17
EN

Stack Overflow用户

发布于 2010-09-09 17:03:19

从技术上讲,放置operator new是任何接受除所需内存大小之外的额外参数的operator new

因此,new(std::nothrow) X使用放置operator newnew(__FILE__, __LINE__) X也是如此。

覆盖operator new(size_t, void*)的唯一原因可能是添加跟踪信息,但我认为对此的需求将相当低。

票数 4
EN

Stack Overflow用户

发布于 2010-09-09 16:52:47

One example在Stroustrup的常见问题解答中。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3675059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档