我有一个最佳拟合算法的代码。我想尝试使用运算符new的最佳拟合算法。在C++中重载新运算符
每次创建一个对象我应该从已分配存储器给它说,分别
1] 20 2] 12 3] 15 4] 6 5] 23。其中最小的数量适合对象的大小(例如21)
我想为不同的对象类型做它,所以我需要编写重载操作符new来作为所有类对象的通用功能。
我可以通过朋友功能吗,或者有什么可行的办法。
我有一个最佳拟合算法的代码。我想尝试使用运算符new的最佳拟合算法。在C++中重载新运算符
每次创建一个对象我应该从已分配存储器给它说,分别
1] 20 2] 12 3] 15 4] 6 5] 23。其中最小的数量适合对象的大小(例如21)
我想为不同的对象类型做它,所以我需要编写重载操作符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&);
如果你想只对某些类别做它,你有2种可能:
使用放置new运算符:
void* operator new (std::size_t, void* ptr);
void* operator new[](std::size_t, void* ptr);
你将不得不与类型明确使用它,或者你可以使用工厂或工厂方法来创建CLASSE的情况下,并在堆内隐藏该实现。
您可以覆盖新的运营商使用它作为一个静态方法类:
class FooBar {
public:
static void* operator new (std::size_t count);
static void* operator new[](std::size_t count);
};
然后就是重载运算符将被用来创建类的实例。
您可以覆盖全局新操作符,也可以重新查找放置位置。 – legends2k
在[C++ - faq](http://stackoverflow.com/questions/tagged/c++-faq)中有一些很好的信息:[Overloading new and delete](http://stackoverflow.com/questions/4421706/运算符重载/ 4421791#4421791) –