C++:放置new与自己的new重载冲突
C++: Placement new collides with own new overload
我重载了类型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*&只是指向要放置新对象的指针的引用。
相关文章:
- 重载运算符new[]的行为取决于析构函数
- 重载 new 和 delete 会导致 valgrind 错误
- 重载运算符 new 和运算符 delete 带有三个参数
- 如果我为一个类编写new和delete运算符,我是否必须编写它们的所有重载
- 运算符重载 new 时 void * nullptr 使程序崩溃
- 重载运算符 new(),为什么构造函数被调用两次?
- 使用重载的 new 和 delete 运算符跟踪已用内存
- 重载运算符 new/new[] 删除/删除[] 全局C++
- C++ 如何在重载"new"运算符中获取行号和函数名称
- c++重载运算符new delete
- 使用可选参数重载 new 和 delete 运算符
- 重载不同返回值的运算符new
- 我什么时候应该在C++中重载new/delete
- 如果通过委托给“malloc”的重载“new[]”分配,“释放”内存是否安全
- C++NEW和DELETE监视器:重载NEW和DELETE
- C++:放置new与自己的new重载冲突
- 重载new和delete时堆崩溃
- 如何重载模板类的 "new" 运算符?
- 在游戏引擎中重载"new"和"delete"进行自定义内存分配有什么好处?
- 在重载的全局new操作符中使用静态对象会导致核心转储运行时错误