簡體   English   中英

`:: operator new`做什么?

[英]what does `::operator new` do?

我正在查看一些重載new / delete的示例代碼

我有以下內容

// manage memory for instances
void * roun_class:: operator new(std::size_t s)
{
    void * result(::operator new(s));
    return result;    
}

這是第一次,我在看::運營商 我在Google / SO中找不到任何關於它的內容。 所以,有人可以解釋為什么我們有::並且沒有前面的課程。 這個::運算符有什么特別之處?

僅供參考,我已經看過以下:: operator()做什么了? 雖然沒有真正回答我的問題

一個前導::通常表示全局命名空間(即沒有命名空間),所以我猜::operator new是必要的,表明我們正在談論內置的new,而不是遞歸調用類的new

::operator new(std::size_t)是全局命名空間中的new(std::size_t)運算符(即:默認內存分配函數之一)。

它在這里被稱為::operator new ,因為如果不是這樣的話,那么operator new就會再次調用自身,這會導致堆棧溢出。

::被稱為范圍解析運算符。
希望這個例子有幫助:

int count = 0;

int main(void) {
  int count = 0;
  ::count = 1;  // set global count to 1
  count = 2;    // set local count to 2
  return 0;
}

請參閱C ++參考: http//publib.boulder.ibm.com/infocenter/macxhelp/v6v81/index.jsp?topic=%2Fcom.ibm.vacpp6m.doc%2Flanguage%2Fref%2Fclrc05cplr175.htm

而就新的超載而言。 這就是我給你的。

void* operator new  ( std::size_t count );  //(1)   
void* operator new[]( std::size_t count ); //(2)    
void* operator new  ( std::size_t count, const std::nothrow_t& );  //(3)    
void* operator new[]( std::size_t count, const std::nothrow_t& );  //(4)    
void* operator new  ( std::size_t, void* ptr );  //(5)  
void* operator new[]( std::size_t, void* ptr );  //(6)

分配函數可以通過兩種方式替換/重載:
在全球范圍內:

為了調用它,重載分配函數的簽名必須在分配位置可見,除了隱式聲明的默認分配函數。 此分配函數將用於當前程序中具有相應參數的所有分配

在本地范圍內:

重載的operator new必須是類的靜態公共成員函數。 此分配函數僅用於該特定類的分配。

Seource: http ://en.cppreference.com/w/cpp/memory/new/operator_new

它在“全局”命名空間中調用new運算符。 這是C ++編譯器內置的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM