C++ 重载new和delete运算符
內(nèi)存管理運算符 new、new[]、delete 和 delete[] 也可以進行重載,其重載形式既可以是類的成員函數(shù),也可以是全局函數(shù)。一般情況下,內(nèi)建的內(nèi)存管理運算符就夠用了,只有在需要自己管理內(nèi)存時才會重載。
以成員函數(shù)的形式重載 new 運算符:
void * className::operator new( size_t size ){//TODO: }以全局函數(shù)的形式重載 new 運算符:
void * operator new( size_t size ){//TODO: }兩種重載形式的返回值相同,都是void *類型,并且都有一個參數(shù),為size_t類型。在重載 new 或 new[] 時,無論是作為成員函數(shù)還是作為全局函數(shù),它的第一個參數(shù)必須是 size_t 類型。size_t 表示的是要分配空間的大小,對于 new[] 的重載函數(shù)而言,size_t 則表示所需要分配的所有空間的總和。
size_t 在頭文件 <cstdio> 中被定義為typedef unsigned int size_t;,也就是無符號整型。當(dāng)然,重載函數(shù)也可以有其他參數(shù),但都必須有默認值,并且第一個參數(shù)的類型必須是 size_t。
同樣的,delete 運算符也有兩種重載形式。以類的成員函數(shù)的形式進行重載:
void className::operator delete( void *ptr){//TODO: }以全局函數(shù)的形式進行重載:
void operator delete( void *ptr){//TODO: }兩種重載形式的返回值都是 void 類型,并且都必須有一個 void 類型的指針作為參數(shù),該指針指向需要釋放的內(nèi)存空間。
當(dāng)我們以類的成員函數(shù)的形式重載了new 和 delete 操作符,其使用方法如下:
C * c = new C; //分配內(nèi)存空間 //TODO: delete c; //釋放內(nèi)存空間如果類中沒有定義 new 和 delete 的重載函數(shù),那么會自動調(diào)用內(nèi)建的 new 和 delete 運算符。
總結(jié)
以上是生活随笔為你收集整理的C++ 重载new和delete运算符的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java 输出当前目录
- 下一篇: C++引用浅析