C++ 允许重载 operator new
- 全局和每个类 - 通常的 operator new
、operator 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/