gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:09:57 25 4
gpt4 key购买 nike

表达式 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com