c++ - 我怎样才能明智地重载放置运算符 new?

标签 c++ visual-c++ memory-management operator-overloading

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

这三个中的前两个通常因使用自定义分配器和添加跟踪而被重载。但是放置 operator new 似乎很简单——它实际上在内部什么都不做。例如,在 Visual C++ 中,默认实现只返回传递给调用的地址:

//from new.h
inline void* operator new( size_t, void* where )
{
   return where;
}

它还能做什么?为什么以及如何合理地重载放置 operator new

最佳答案

正确答案是你不能替换操作符放置新

§18.4.​1.3 Placement forms
These functions are reserved, a C++ program may not define functions that displace the versions in the Standard C++ library.

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

关于c++ - 我怎样才能明智地重载放置运算符 new?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3675059/

相关文章:

visual-c++ - RC2135 文件未找到错误

c++ - MSVC 中的 ODR 错误?

c++ - 是否可以在没有任何内存泄漏的情况下增加我的代码的内存使用量?

objective-c - 在这里过度释放?

c++ - 指针困惑

c++ - 如何聚合 float 组并使用可并行化方法获得精确结果?

c++ - 如何编写一个可以下载并安装许多包的程序(c++)?

c++ - XCode导入C++工程问题: "referenced from"

c++ - 为什么我的 DLL 文件和它对应的 LIB 文件有不同的名字?

memory-management - 如何处理 Torch 中的 GPU 内存泄漏问题?