C 過載new和delete運算子

2022-09-03 21:48:14 字數 1043 閱讀 9329

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

以成員函式

的形式過載 new 運算子:

void * classname::operator new( size_t size )

以全域性函式的形式過載 new 運算子:

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 classname::operator delete( void *ptr)

以全域性函式

的形式進行過載:

void operator delete( void *ptr)

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

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

c * c = new c; //分配記憶體空間

//todo:

delete c; //釋放記憶體空間

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

過載C 的new和delete

過載c c 標準庫的記憶體管理函式 比如malloc,free,operator new,operator delete,operator new,operator delete 時,編譯器會忽視重定義,所以不用擔心鏈結時會產生重定義錯誤。operator new,operator delete,o...

C 記憶體過載new和delete方法

一 過載的原因 用new建立動態物件時會發生兩件事 1 使用operatoe new 為物件分配記憶體 經常是呼叫malloc 2 呼叫建構函式來初始化記憶體。相對應的呼叫delete運算子會 1 首先呼叫析構函式 2 呼叫operator delete 釋放記憶體 經常是呼叫free 使用了new...

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

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