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运算符将从列表中分配内存,而不是从堆中分配内存以加速内存分配。当删除的节点列表为空时,可以使用堆中的内存。

另外如果你想更好的提升你的编程能力,学好C语言C++编程!弯道超车,快人一步!

C语言C++编程学习交流圈子,QQ群1095293493【点击进入】微信公众号:C语言编程学习基地

分享(源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

编程学习书籍分享:

编程学习视频分享:

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/112Q/p/13887951.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!