C++内存管理操作符重载
内存管理操作符 new、new[]、delete 和 delete[] 同样也可以进行操作符重载,其重载形式既可以是类成员函数的形式,又可以是顶层函数的形式。
设计一般的程序时,使用内建的内存管理操作符基本够用了,只有在需要进行自己的内存管理时才会对内存管理操作符进行重载。
操作符 new 的重载函数有两种形式:
当然,重载函数也可以有其它参数,其它参数可以根据需要增加,但是第一个参数必须是 size_t 类型。如下面的重载是错误的:
同样的,delete 操作符也有两种重载形式:
当我们以类成员函数的形式重载了 new 和 delete 操作符时,其使用方法如下:
声明:《C++系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
设计一般的程序时,使用内建的内存管理操作符基本够用了,只有在需要进行自己的内存管理时才会对内存管理操作符进行重载。
操作符 new 的重载函数有两种形式:
void * 类名::operator new ( size_t size ) { //以类成员函数的形式重载new操作符 }和
void * operator new ( size_t size ) { //以顶层函数的形式重载new操作符 }两种方式的重载函数返回值都是相同的,都是 void * 类型。重载函数的参数都有一个参数,且均为 size_t 类型。重载 new 和 new[] 操作符时,无论是以何种形式进行重载的,重载函数的第一个参数必须是 size_t 类型,该参数表示的含义是要分配空间的大小,对于 new[] 的重载函数而言,size_t 类型参数表示所需要分配的所有空间的总和。
当然,重载函数也可以有其它参数,其它参数可以根据需要增加,但是第一个参数必须是 size_t 类型。如下面的重载是错误的:
void * 类名:: operator new( void * ptr) { }
同样的,delete 操作符也有两种重载形式:
void 类名:: operator delete ( void *ptr) { //以类成员函数的形式重载delete操作符 }和
void 类名:: operator delete ( void *ptr) { //以类成员函数的形式重载delete操作符 }两种重载方式均返回 void,并且两种重载方式都必须有一个类型为 void* 的参数,该指针指向需要释放的内存空间。重载 delete[] 操作符同样也都必须有一个 void* 型类型的参数,指向需要释放的内存空间,当然重载函数同样可以根据需要添加其它参数,但是第一个参数的类型必须是指向待释放的内存空间的 void* 类型。
当我们以类成员函数的形式重载了 new 和 delete 操作符时,其使用方法如下:
C * c = new C; //分配内存空间 // delete c; //释放内存空间当然,如果类中没有定义 new 或者 delete 的重载函数,系统会自动调用内建的 new 或 delete 操作符。
声明:《C++系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。