c++ - 调用特定于类的运算符 new

标签 c++ memory

表达式 operator new(sizeof(T)) 通过 ::operator new 分配 T 字节,正确吗?

有什么方法可以调用 operator new 的类特定版本如果它存在,就像new T()分配内存(在调用构造函数之前)?

T::operator new(sizeof(T)) 如果 T 没有定义 operator new,即使如果 T 继承自定义它的基类。我想调用的是:

  • Foo::operator new 如果 Foo 定义了 operator new
  • Base::operator new 如果 Foo 派生自定义 operator newBase(我该怎么做关于多重继承?)
  • ::operator new 否则

最佳答案

标准库使用分配器对象解决了这个问题,该对象的类型被设置为需要自定义分配算法的类的模板参数。

我认为没有任何完整的方法可以完成您的要求,第二个项目符号已经证明了这一点。如果它们都定义了一个,编译器就无法知道使用哪个父操作符 new。

例如,如果您尝试实现一个在编译时选择合适大小/池的小型对象分配器池,那么使用独立的模板分配器函数怎么样:它会被称为 object_allocator<T>::allocate() 之类的东西模板类型会让你自动计算出大小。由于多重继承问题,您仍然无法继承 operator new,但它可以很容易地弄清楚如何在任何类中分配内存。

关于c++ - 调用特定于类的运算符 new,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3083987/

相关文章:

html - Adobe Air HTML 动态图库——如何通过删除图片释放内存

c# - 如何读取加载到内存中的模块的 PE header ?

c++ - 转换.c++后在char类型的原始缓冲区上调用delete

c++ - C++ 中是否有标准的 3d vector 类

c++ - 多态、访问者、如何调用重载函数?

c# - 是否有可能在实现 IDisposable 的类的析构函数中调用 GC?

c - 如何用 C 中的内存地址初始化 char 数组?

c++ - 如何解决递归变量

c++ - 这两个字符串有什么区别?

c++ - 错误 : no type named ‘_traits’ in ‘class date::year_month_day’ ?