我为类型X
重载了新运算符以使用一些内存池。我的new
运算符不使用用户定义的参数,因此,唯一的参数是size_t
类型的对象的大小。在程序的另一部分,我需要为同一类型放置new,如下所示:
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
候选人是我对新运营商的超载。我的问题是:
X*&
?答案 0 :(得分:2)
重写TypeName :: operator new(size_t)要求您也覆盖placement new运算符(不需要相反)。这就是编译器抱怨的原因。 (有道理 - 如果你在分配期间做了一些奇怪的事情,你可能也希望在placement new运算符的指定位置执行此操作,反之则不一定正确)。 和X *&只是对你想要新对象的指针的引用。