我已经为类型 X
重载了 new 运算符以使用一些内存池。我的 new
运算符不接受用户定义的参数,因此,唯一的参数是类型为 size_t
的对象的大小。在程序的另一部分,我需要为相同类型放置新的位置,如下所示:
new (ptr) X();
(其中 ptr 是指向预分配内存位置的指针)
似乎我的 new 运算符重载类型阴影放置 new。至少,编译器会提示:
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*&
吗?
最佳答案
覆盖 TypeName::operator new (size_t) 要求您还覆盖放置新运算符(不需要相反的操作)。这就是编译器提示的原因。 (有道理 - 如果您在分配期间做了一些奇怪的事情,您可能也想在放置新运算符的指定位置执行此操作,反之则不一定正确)。 而 X*& 只是对您想要新对象的指针的引用。
关于C++:新放置与自己的新重载发生冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12215029/