繁体   English   中英

重载C ++中的new运算符

[英]overloading new operator in c++

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

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

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

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

我可以通过朋友功能来完成此操作,还是有任何可能的方法可以执行。

如果要对程序中的所有类型使用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 );

您将必须使用该类型显式使用它,或者可以使用factory或factory方法在堆上创建该类的实例,并将该实现隐藏在内部。

您可以将它用作静态方法来覆盖类的new运算符:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM