表达式 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 new
的Base
(我该怎么做关于多重继承?)::operator new
否则
最佳答案
标准库使用分配器对象解决了这个问题,该对象的类型被设置为需要自定义分配算法的类的模板参数。
我认为没有任何完整的方法可以完成您的要求,第二个项目符号已经证明了这一点。如果它们都定义了一个,编译器就无法知道使用哪个父操作符 new。
例如,如果您尝试实现一个在编译时选择合适大小/池的小型对象分配器池,那么使用独立的模板分配器函数怎么样:它会被称为 object_allocator<T>::allocate()
之类的东西模板类型会让你自动计算出大小。由于多重继承问题,您仍然无法继承 operator new,但它可以很容易地弄清楚如何在任何类中分配内存。
关于c++ - 调用特定于类的运算符 new,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3083987/