我有一个最佳拟合算法的代码。我想尝试使用运算符 new 使用最佳拟合算法。
每次我创建一个对象时,我都应该从已经分配的内存中给它说,
1]20 2]12 3]15 4]6 5]23。最小数量适合对象大小(例如21)
我想为不同的对象类型做这件事,所以我需要编写重载的运算符 new 以成为所有类对象的通用功能。
我可以通过朋友功能做到这一点,还是有什么可能的方法。
我有一个最佳拟合算法的代码。我想尝试使用运算符 new 使用最佳拟合算法。
每次我创建一个对象时,我都应该从已经分配的内存中给它说,
1]20 2]12 3]15 4]6 5]23。最小数量适合对象大小(例如21)
我想为不同的对象类型做这件事,所以我需要编写重载的运算符 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& );
如果您只想为某些课程做这件事,您有两种可能性:
使用放置运算符 new:
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 );
};
然后该重载运算符将用于创建该类的实例。