0

我已经为一种类型重载了 new 运算符X以使用一些内存池。我的new运算符不接受用户定义的参数,因此,唯一的参数是 type 对象的大小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

候选人是我对 new 运算符的重载。我的问题是:

  • 为什么编译器不能识别我想使用placement new?
  • 无论如何,我该如何使用它?
  • WTF 是X*&错误信息中显示的类型?
4

1 回答 1

2

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

于 2012-08-31T12:13:51.127 回答