簡體   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