C++ 重载c+中的新运算符+;

C++ 重载c+中的新运算符+;,c++,C++,我有一个最佳拟合算法的代码。我想尝试使用使用新操作符的最佳拟合算法 每次我创建一个对象时,我都应该从已经分配的内存中给它,比如 1] 20 2]12 3]15 4]6 5]23。哪一个最小数量适合对象大小(如21) 我想对不同的对象类型执行此操作,因此我需要编写重载运算符new,使其成为所有类对象的通用功能 我可以通过friend函数来完成吗,或者是否有任何可能的方法来完成。如果要对程序中的所有类型使用运算符new,只需覆盖全局运算符new: void* operator new ( std:

我有一个最佳拟合算法的代码。我想尝试使用使用新操作符的最佳拟合算法

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

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

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


我可以通过friend函数来完成吗,或者是否有任何可能的方法来完成。

如果要对程序中的所有类型使用运算符new,只需覆盖全局运算符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 );
如果您只想对某些课程进行此操作,则有两种可能性:

使用新的放置操作符:

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 );
您必须显式地将其用于该类型,或者您可以使用factory或factory方法在堆上创建该类的实例,并将该实现隐藏在其中

您可以将new运算符用作静态方法来重写它:

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

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

您可以覆盖全局新运算符,也可以查找新的位置。中有一些很好的信息:因此您可以安全地删除静态。@legends2k谢谢,但我认为在某些情况下,这表明显式删除不会有任何影响(就像我们可以省略派生方法上的虚拟,但最好不要使用IMHO)