C++中的运算符重载:new运算符与operator new的区别

需积分: 10 3 下载量 105 浏览量 更新于2024-08-19 收藏 1.74MB PPT 举报
"本文主要介绍了C++中的运算符重载,特别是`new`运算符的使用和重载。文中强调了`new`运算符在内存分配和对象构造过程中的作用,以及为什么需要通过`new`来创建堆上的对象。同时,文章提到了高质量C++编程中如何利用运算符重载实现类的行为,比如`Iter`类为`GCPtr`类提供类似指针的操作。此外,还探讨了哪些运算符可以被重载,哪些不能,以及重载运算符的规则和注意事项。" 在C++编程中,运算符重载是一项强大的特性,允许我们为自定义类型赋予与内置类型相似的运算行为。标题提到的“当编译器遇见这样语句时”,即`string *ps = new string("Memory Management");`,展示了`new`运算符如何工作。`new`操作符负责两件事:首先,通过`operator new`函数分配内存,然后调用构造函数初始化对象。这里`operator new`是可重载的,而`new`运算符本身是不可重载的。这意味着我们可以自定义内存分配的方式,但不能改变`new`如何调用构造函数或分配内存的基本行为。 `Iter`类的例子展示了如何通过重载运算符实现类似指针的行为,使得类能够支持算术运算、边界检查等操作,以增强其功能性和易用性。运算符重载通常应该基于实际需求来进行,以确保类的行为与用户的期望一致。 C++中,可以重载的运算符包括加减乘除、位运算符、比较运算符、赋值运算符等,但有些特殊运算符如`::`、`sizeof`、`typeid`等是不能重载的。重载运算符的函数可以是类的成员函数或友元函数,成员函数通常会有一个额外的隐含参数`this`,而友元函数则没有。重载运算符时,必须遵循一定的规则,如保持原有的操作数个数、优先级和结合性不变,不改变其本质含义。 运算符重载是C++中提升代码表达力和可读性的关键工具,但同时也需要谨慎使用,避免过度设计或滥用。理解`new`运算符的工作原理和重载运算符的规则,有助于编写出更加高效和易维护的C++程序。