7

我知道你可以重载 operator 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 分配它。

4

1 回答 1

13

使用该附加操作数调用 new,例如

 Monkey *amonkey = new (1275) Monkey(a);

附加物

Boehm 的垃圾收集器new给出了一个将参数 [s] 传递给运算符的实际示例,它使您能够编写代码

 Monkey *acollectedmonkey = new(UseGc) Monkey(a);

然后你不必费心delete-ing acollectedmonkey(假设它的析构函数不做奇怪的事情;见这个答案)。Allocator这些是您希望将显式参数传递给模板集合(如std::vectoror )的罕见情况std::map

使用内存池时,您通常希望拥有一些MemoryPool类,并将该类的实例(或指向它们的指针)传递给您new 和您的delete操作。出于可读性的原因,我不建议使用一些晦涩的整数来引用内存池。

于 2011-12-31T00:50:24.693 回答