gpt4 book ai didi

C++ - 重载 operator new 并提供额外的参数

转载 作者:可可西里 更新时间:2023-11-01 18:21:05 24 4
gpt4 key购买 nike

我知道您可以重载运算符 new。当您这样做时,默认情况下您的方法会收到一个 size_t 参数。但是,是否可以将 size_t 参数以及用户提供的其他参数发送到重载的 new 运算符方法?

例如

int a = 5;
Monkey* monk = new Monkey(a);

因为我想像这样覆盖新的操作符

void* Monkey::operator new(size_t size, int a)
{

...

}

谢谢

编辑:这是我想要完成的:

我在应用程序开始时分配了一大块虚拟内存(内存池)。继承我的基类的所有对象都将继承其重载的 new 运算符。我有时想在重载的 new 中传递一个参数的原因是告诉我的内存管理器我是否想使用内存池,或者我是否想用 malloc 分配它。

最佳答案

用那个额外的操作数调用 new,例如

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

附录

Boehm's garbage collector 给出了将参数 [s] 传递给 new 运算符的实际示例,这使您能够编码

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

然后您就不必为 delete-ing acollectedmonkey 操心了(假设它的析构函数不做奇怪的事情;参见 this answer )。在极少数情况下,您希望将显式 Allocator 参数传递给 std::vectorstd::map 等模板集合。

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

关于C++ - 重载 operator new 并提供额外的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8685469/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com