gpt4 book ai didi

c++ - 在 C++ 中重载新运算符

转载 作者:行者123 更新时间:2023-11-28 07:20:51 25 4
gpt4 key购买 nike

我有一个最佳拟合算法的代码。我想尝试使用 operator new 来使用最佳拟合算法。

每次我创建一个对象时,我应该从已经分配的内存中给它,比如,

1]20 2]12 3]15 4]6 5]23。哪个最小量适合对象大小(例如 21)

我想针对不同的对象类型执行此操作,因此我需要编写重载的 operator new 使其成为所有类对象的通用功能。

我可以通过友元函数来实现吗,或者有什么可行的方法吗。

最佳答案

如果您想对程序中的所有类型使用 operator new,只需覆盖全局 operator new:

void* operator new  ( std::size_t count );
void* operator new[]( std::size_t count );
void* operator new ( std::size_t count, const std::nothrow_t& );
void* operator new[]( std::size_t count, const std::nothrow_t& );

如果你只想对某些类这样做,你有两种可能性:

使用新的放置运算符:

void* operator new  ( std::size_t, void* ptr );
void* operator new[]( std::size_t, void* ptr );

您必须显式地将它用于那些类型,或者您可以使用工厂或工厂方法在堆上创建该类的实例并将该实现隐藏在里面。

您可以将其用作静态方法来覆盖类的 operator new:

class FooBar {
public:
static void* operator new ( std::size_t count );
static void* operator new[]( std::size_t count );
};

然后该重载运算符将用于创建该类的实例。

关于c++ - 在 C++ 中重载新运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19485972/

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