首页 理论教育重载运算符new与delete在C++程序设计基础

重载运算符new与delete在C++程序设计基础

【摘要】:前面已经学习过,在C++程序中建立和删除对象使用两个运算符new和delete。new与delete两个运算符用于动态管理内存,在大多数情况下,它们是非常有效的。这就要重载运算符new与delete,使其按照要求完成对内存的管理。而且,无论是否使用关键字static进行修饰,重载了的new和delete均为类的静态成员函数。在带有“参数表”时,应注意使用重载new的方式。程序执行结果如下:new1 operatordelete operatornew2 operatordelete operator

前面已经学习过,在C++程序中建立和删除对象使用两个运算符new和delete。new与delete两个运算符用于动态管理内存,在大多数情况下,它们是非常有效的。但有些情况下我们需要自已管理内存,以克服new与delete的不足。这就要重载运算符new与delete,使其按照要求完成对内存的管理。

注意:new和delete只能被重载为类的成员函数,不能重载为友元。而且,无论是否使用关键字static进行修饰,重载了的new和delete均为类的静态成员函数。

运算符new重载的一般格式如下:

void*类名∷operator new(size_t,参数表);

new重载应返回一个无值型的指针,且至少有一个类型为size_t(size_t是C++系统内置类型)的参数。若该重载带有多于一个的参数,则其第一个参数的类型必须为size_t。

在带有“参数表”时,应注意使用重载new的方式。例如,若一个类X有如下重载new的成员函数:

则使用重载new的方式如下:

X*pX=new(1,2,3)X;

运算符delete重载的一般格式如下:(www.chuimin.cn)

void*类名∷operator delete(void*,参数表);

【例4.14】分析以下程序的执行结果。

解:上述程序中,类MyClass中设计两个new重载成员函数和一个delete重载成员函数,其中,new重载成员函数中有一个带有“参数表”。在main中建立对象s2时调用这个带参数表的成员函数。程序执行结果如下:

new1 operator

delete operator

new2 operator

delete operator