C++ 重载new和delete运算符
生活随笔
收集整理的這篇文章主要介紹了
C++ 重载new和delete运算符
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
內存管理運算符 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 運算符。
總結
以上是生活随笔為你收集整理的C++ 重载new和delete运算符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java 输出当前目录
- 下一篇: C++引用浅析