首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C/C+编程笔记:运算符重载丨重载C+中New和Delete运算符

new和delete运算符也可以像C ++中的其他运算符一样重载。New和Delete运算符可以全局重载,也可以在特定类中重载。

(1)如果使用某个类的成员函数来重载这些运算符,则意味着这些运算符仅针对该特定类才被重载。

(2)如果重载是在类外部完成的(即它不是类的成员函数),则只要您使用这些运算符(在类内或类外),都将调用重载的“ new”和“ delete”。这是全局超载。

重载new运算符的语法:

void *运算符new(size_t size);

重载的new运算符接收的大小为size_t类型,该大小指定要分配的内存字节数。重载的new的返回类型必须为void *。重载的函数返回一个指向分配的内存块开头的指针。

重载delete运算符的语法:

无效运算符delete(void *);

该函数接收一个必须删除的void *类型的参数。函数不应该返回任何东西。

注意:默认情况下,重载的new和delete运算符函数都是静态成员。因此,他们无权访问此指针。

重载特定类的new和delete运算符

重载大小为16的新运算符构造函数称为名称:Yash年龄:24重载删除运算符

注意:在上述新的重载函数中,我们已经通过new运算符分配了动态内存,但是它应该是global new运算符,否则它将以递归形式

无效* p = new student(); //这将递归,因为new将会一次又一次地被重载。

void * p = :: new student(); // 这是对的

new和delete运算符的全局重载

输出:

新操作员重载 数组:0 1 2 3 4 删除运算符重载

注意:在上面的代码中,在新的重载函数中,我们无法使用:: new int [5]分配内存,因为它将以递归方式进行。我们只需要使用malloc分配内存。

为什么要重载new和Delete?

(1)重载的new运算符函数可以接受参数;因此,一个类可以具有多个重载的新运算符功能。这使程序员在自定义对象的内存分配方面具有更大的灵活性。例如:

注意:代码不仅将为单个字符分配内存,还将使用#字符初始化分配的内存。

(2)重载的new或delete运算符还为类的对象提供了垃圾回收。

(3)可以在重载的新运算符函数中添加异常处理例程。

(4)有时,您希望操作员是new并删除它们,以执行一些编译器提供的版本不提供的自定义操作。例如,您可能会编写一个自定义运算符delete,以用0覆盖释放的内存,以提高应用程序数据的安全性。

(5)我们可以在新函数中使用realloc()函数动态地重新分配内存。

(6)重载的新运算符还使程序员能够从其程序中榨取一些额外的性能。例如,在一个类中,为了加快新节点的分配,维护了一个已删除节点的列表,以便在分配新节点时可以重新使用其内存。在这种情况下,重载的delete运算符会将节点添加到列表中删除的节点和重载的new运算符将从列表中分配内存,而不是从堆中分配内存以加速内存分配。当删除的节点列表为空时,可以使用堆中的内存。

希望对你有帮助!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20201027A0IPJA00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券