C++:放置new与自己的new重载冲突

C++: Placement new collides with own new overload

本文关键字:new 重载 冲突 自己的 放置 C++      更新时间:2023-10-16

我重载了类型X的新运算符以使用一些内存池。我的new运算符不接受用户定义的参数,因此,唯一的参数是类型为size_t的对象的大小。在程序的另一部分,我需要相同类型的新位置,比如:

new (ptr) X();

(其中ptr是指向预先分配的内存位置的指针)

看来我重载的新操作符对于阴影类型的放置是新的。至少,编译器抱怨道:

error: no matching function for call to ‘X::operator new(long unsigned int, X*&)’
note: candidate is:
note: static void* X::operator new(size_t)
note:   candidate expects 1 argument, 2 provided

候选人是我的新操作员。我的问题是:

  • 为什么编译器没有意识到我要使用placement new
  • 我该怎么用
  • WTF是错误消息中显示的类型X*&

override TypeName::operator new(size_t)还需要覆盖placement new运算符(不需要相反的运算符)。这就是编译器抱怨的原因。(这很有道理——如果您在分配过程中做了一些奇怪的事情,您可能也希望在placement-new操作符中的指定位置进行操作,反之则不一定正确)。并且X*&只是指向要放置新对象的指针的引用。