我有一個最佳擬合算法的代碼。我想嘗試使用運算符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) –