[英]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.