理解C 語言中「New Operator」和「Operator New」的區別
「new」運算符和「operator new」在C 中,在記憶體管理中執行不同的函數以動態建立物件。
運算子新功能:原始記憶體分配
「Operator new」是一個低階函數,負責從作業系統分配原始記憶體。它的函數與“malloc”函數類似,提供指定大小的記憶體區塊,而不呼叫任何建構函式或析構函式。您可以直接呼叫“operator new”,如下所示:
char *x = static_cast<char *>(operator new(100));
重載“operator new”可讓您自訂特定類型或全域的記憶體分配。它的簽章通常是:
void *operator new(size_t);
New 運算子:使用建構函式建立物件
相反,「new」運算子通常用於動態建立物件。它首先呼叫“operator new”來分配內存,然後透過呼叫適當的構造函數來初始化物件。此過程還涉及按正確的順序呼叫嵌入物件建構函數和基底類別建構函數。
例如:
my_class *x = new my_class(0);
關鍵區別
“operator new”和“new”運算符之間的主要區別在於,前者僅僅分配原始內存,而後者將內存分配與物件創建和初始化結合在一起。 「new 運算子」提供了對記憶體管理的更多控制,而「new」運算子透過處理記憶體分配和物件初始化來簡化物件建立。
以上是C 的「new」運算子和「operator new」有什麼不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!