【发布时间】:2012-01-30 21:51:40
【问题描述】:
我知道您可以重载运算符new。当你这样做时,你的方法会默认发送一个size_t 参数。但是,是否可以将 size_t 参数以及其他用户提供的参数发送到重载的 new 运算符方法?
例如
int a = 5;
Monkey* monk = new Monkey(a);
因为我想像这样覆盖 new 运算符
void* Monkey::operator new(size_t size, int a)
{
...
}
谢谢
编辑:这是我想要完成的:
我在应用程序启动时分配了一大块虚拟内存(内存池)。继承我的基类的所有对象都将继承其重载的 new 运算符。 我有时想在重载的 new 中传递参数的原因是告诉我的内存管理器我是否想使用内存池,或者我想用 malloc 分配它。
【问题讨论】:
-
虽然这是可能的,但我想知道激励用例是什么。您想将什么作为
int参数传递给new? -
为什么要超载
new?你到底想完成什么? -
这很有趣,你将如何为你的对象释放内存?
-
@luskan:你也可以将额外的参数传递给
delete,例如传递用于new的相同内存池 -
@BasileStarynkevitch:不,您不能将额外的参数传递给
delete。operator delete的放置版本仅在构造函数抛出异常时调用。
标签: c++ memory-management operator-overloading placement-new