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

new和delete运算符也可以像C ++中的其他运算符一样重载 。 New和Delete运算符可以全局重载 , 也可以在特定类中重载 。
(1)如果使用某个类的成员函数来重载这些运算符 , 则意味着这些运算符仅针对该特定类才被重载 。
(2)如果重载是在类外部完成的(即它不是类的成员函数) , 则只要您使用这些运算符(在类内或类外) , 都将调用重载的“ new”和“ delete” 。 这是全局超载 。
C/C++编程笔记:重载C++中的New和Delete运算符文章插图
重载new运算符的语法:
void *运算符new(size_t size);
重载的new运算符接收的大小为size_t类型 , 该大小指定要分配的内存字节数 。 重载的new的返回类型必须为void * 。 重载的函数返回一个指向分配的内存块开头的指针 。
重载delete运算符的语法:
无效运算符delete(void *);
该函数接收一个必须删除的void *类型的参数 。 函数不应该返回任何东西 。
注意:默认情况下 , 重载的new和delete运算符函数都是静态成员 。 因此 , 他们无权访问此指针 。
重载特定类的new和delete运算符
C/C++编程笔记:重载C++中的New和Delete运算符文章插图
C/C++编程笔记:重载C++中的New和Delete运算符文章插图
重载大小为16的新运算符构造函数称为名称:Yash年龄:24重载删除运算符
注意:在上述新的重载函数中 , 我们已经通过new运算符分配了动态内存 , 但是它应该是global new运算符 , 否则它将以递归形式
无效* p = new student(); //这将递归 , 因为new将会一次又一次地被重载 。
void * p = :: new student(); // 这是对的
new和delete运算符的全局重载
C/C++编程笔记:重载C++中的New和Delete运算符文章插图
输出:
新操作员重载 数组:0 1 2 3 4 删除运算符重载
注意:在上面的代码中 , 在新的重载函数中 , 我们无法使用:: new int [5]分配内存 , 因为它将以递归方式进行 。 我们只需要使用malloc分配内存 。
为什么要重载new和Delete?(1)重载的new运算符函数可以接受参数;因此 , 一个类可以具有多个重载的新运算符功能 。 这使程序员在自定义对象的内存分配方面具有更大的灵活性 。 例如:
C/C++编程笔记:重载C++中的New和Delete运算符文章插图
注意:代码不仅将为单个字符分配内存 , 还将使用#字符初始化分配的内存 。
(2)重载的new或delete运算符还为类的对象提供了垃圾回收 。
(3)可以在重载的新运算符函数中添加异常处理例程 。
(4)有时 , 您希望操作员是new并删除它们 , 以执行一些编译器提供的版本不提供的自定义操作 。 例如 , 您可能会编写一个自定义运算符delete , 以用0覆盖释放的内存 , 以提高应用程序数据的安全性 。
(5)我们可以在新函数中使用realloc()函数动态地重新分配内存 。
C/C++编程笔记:重载C++中的New和Delete运算符文章插图
(6)重载的新运算符还使程序员能够从其程序中榨取一些额外的性能 。 例如 , 在一个类中 , 为了加快新节点的分配 , 维护了一个已删除节点的列表 , 以便在分配新节点时可以重新使用其内存 。 在这种情况下 , 重载的delete运算符会将节点添加到列表中删除的节点和重载的new运算符将从列表中分配内存 , 而不是从堆中分配内存以加速内存分配 。 当删除的节点列表为空时 , 可以使用堆中的内存 。
另外如果你想更好的提升你的编程能力 , 学好C语言C++编程!弯道超车 , 快人一步!
编程学习书籍分享:
C/C++编程笔记:重载C++中的New和Delete运算符文章插图
编程学习视频分享:
C/C++编程笔记:重载C++中的New和Delete运算符文章插图
分享(源码、项目实战视频、项目笔记 , 基础入门教程)
欢迎转行和学习编程的伙伴 , 利用更多的资料学习成长比自己琢磨更快哦!
【C/C++编程笔记:重载C++中的New和Delete运算符】C语言C++编程学习交流圈子 , 点击下方【了解更多】获取学习资料帮助你成长进步哦~