C 學習32 過載new和delete運算子

2022-07-16 10:06:06 字數 1128 閱讀 6069

記憶體管理運算子 new、new、delete 和 delete 也可以進行過載,其過載形式既可以是類的成員函式,也可以是全域性函式。一般情況下,內建的記憶體管理運算子就夠用了,只有在需要自己管理記憶體時才會過載。

過載 new 有兩種形式:

//

以類的成員函式的形式進行過載

void * 類名::operator

new( size_t size )

//

以全域性函式的形式進行過載

void * operator

new( size_t size )

兩種過載形式的返回值相同,都是void *型別,並且都有乙個引數,為size_t型別。在過載 new 或 new 時,無論是作為成員函式還是作為全域性函式,它的第乙個引數必須是 size_t 型別。size_t 表示的是要分配空間的大小,對於 new 的過載函式而言,size_t 則表示所需要分配的所有空間的總和。

size_t 在標頭檔案 中被定義為typedef unsigned int size_t;,也就是無符號整型。

當然,過載函式也可以有其他引數,但都必須有預設值,並且第乙個引數的型別必須是 size_t。

同樣的,delete 運算子也有兩種過載形式:

//

以類的成員函式的形式進行過載

void 類名:: operator

delete ( void *ptr)

//

以全域性函式的形式進行過載

void 類名:: operator

delete ( void *ptr)

兩種過載形式的返回值都是 void 型別,並且都必須有乙個 void 型別的指標作為引數,該指標指向需要釋放的記憶體空間。

當我們以類的成員函式的形式過載了new 和 delete 操作符,其使用方法如下:

c * c = new c;  //

分配記憶體空間

//delete c; //

釋放記憶體空間

如果類中沒有定義 new 和 delete 的過載函式,那麼會自動呼叫內建的 new 和 delete 運算子。

c 學習筆記3 過載

c 允許在同一作用域中的某個函式和運算子指定多個定義,分別稱為函式過載和運算子過載。過載宣告是指乙個與之前已經在該作用域內宣告過的函式或方法具有相同名稱的宣告,但是它們的引數列表和定義 實現 不相同。當您呼叫乙個過載函式或過載運算子時,編譯器通過把您所使用的引數型別與定義中的引數型別進行比較,決定選...

C 入門(6)過載

過載 using system class vector 獲取向量的長度 public double getlength 過載運算子 public static bool operator vector a,vector b 過載運算子 public static bool operator vec...

C 問題4 過載

在同一作用域類,一組函式的函式名相同,引數列表不同 引數個數不同或者引數型別不同 返回值可同可不同。過載函式通常用來在同乙個作用域內,用同乙個函式名命名一組功能相似的函式,這樣做減少了函式名的數量,避免了名字空間的汙染,對於程式的可讀性有很大的好處。1 多型 用同乙個東西表示不同的形態。2 多型分為...