程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++基礎知識 >> C++重載new和delete運算符

C++重載new和delete運算符

編輯:C++基礎知識
內存管理運算符 new、new[]、delete 和 delete[] 也可以進行重載,其重載形式既可以是類的成員函數,也可以是全局函數。一般情況下,內建的內存管理運算符就夠用了,只有在需要自己管理內存時才會重載。

以成員函數的形式重載 new 運算符:

void * className::operator new( size_t size ){
    //TODO:
}

以全局函數的形式重載 new 運算符:

void * operator new( size_t size ){
    //TODO:
}

兩種重載形式的返回值相同,都是void *類型,並且都有一個參數,為size_t類型。在重載 new 或 new[] 時,無論是作為成員函數還是作為全局函數,它的第一個參數必須是 size_t 類型。size_t 表示的是要分配空間的大小,對於 new[] 的重載函數而言,size_t 則表示所需要分配的所有空間的總和。
size_t 在頭文件 <cstdio> 中被定義為typedef unsigned int size_t;,也就是無符號整型。
當然,重載函數也可以有其他參數,但都必須有默認值,並且第一個參數的類型必須是 size_t。

同樣的,delete 運算符也有兩種重載形式。以類的成員函數的形式進行重載:

void className::operator delete( void *ptr){
    //TODO:
}

以全局函數的形式進行重載:

void operator delete( void *ptr){
    //TODO:
}

兩種重載形式的返回值都是 void 類型,並且都必須有一個 void 類型的指針作為參數,該指針指向需要釋放的內存空間。

當我們以類的成員函數的形式重載了new 和 delete 操作符,其使用方法如下:
C * c = new C;  //分配內存空間
//TODO:
delete c;  //釋放內存空間
如果類中沒有定義 new 和 delete 的重載函數,那麼會自動調用內建的 new 和 delete 運算符。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved