首頁 >後端開發 >C++ >C `new` 運算子和 `operator new` 有什麼區別?

C `new` 運算子和 `operator new` 有什麼區別?

Patricia Arquette
Patricia Arquette原創
2024-12-16 05:59:09220瀏覽

What's the Difference Between the C   `new` Operator and `operator new`?

新運算子與新運算子:揭秘差異

「新運算子」和「新運算子」之間的差異可能會令人困惑。這裡有一個深入的解釋來澄清差異。

Operator New:原始記憶體分配器

Operator new 是一個標準 C 函數,它從堆中分配未初始化的記憶體。它的操作與 malloc() 函數類似,但特定於 C 。

您可以直接呼叫operator new 保留原始記憶體:

char *x = static_cast<char *>(operator new(100));

可以重載operator new,讓您為特定類別或全域自訂記憶體指派。

新運算子:物件建立和初始化

「新運算子」是用於在 C 中建立物件的主要方法。它結合了operator new和類別建構子的功能。

當你使用new運算子時:

my_class *x = new my_class(0);

它先呼叫operator new為物件my_class分配原始記憶體。隨後,它會呼叫建構函式 my_class(0) 來初始化該記憶體中的物件。如果 my_class 包含嵌入或基底類別對象,也會呼叫它們的建構子。

主要區別

「new 運算子」和「operator new」之間的根本區別在於它們的行為:

  • 運算符new: 分配原始內存,不使用任何初始化。
  • "New 運算子": 將透過operator new 進行的記憶體分配與透過建構子進行物件建構結合。

綜上所述,operator new 是一個較低層級的用於分配原始記憶體的函數,而「new 運算子」則是更高層級的抽象,可以無縫處理記憶體分配和物件初始化。

以上是C `new` 運算子和 `operator new` 有什麼區別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn