赋值操作符重载函数形参规格

来源:互联网 发布:淘宝打包人员招聘 编辑:程序博客网 时间:2024/06/04 18:06

赋值操作符重载函数形参规格

赋值操作符重载函数的形参基本都写为常量引用,返回值为引用。
class A{public:A(int data = 0) : m_data(data) {}~A() {}A& operator=(const A& other){if (this == &other){return *this;}m_data = other.m_data;return *this;}void print(){cout << m_data << endl;}private:int m_data;};int main(){A a(1);A b(2);a.print();b.print();a = b;a.print();b.print();A c = a;c.print();return 0;}
1、返回值类型为该该类型的引用,并在函数结束返回对象本身的引用(*this),这样是为了允许连续赋值,如果返回void则不能进行连续赋值。
2、形参为常量引用,如果不是引用,在赋值是会调用拷贝构造函数,把参数声明为引用可以避免这样的消耗,提高代码效率。另外在赋值操作符重载函数内不会改变穿入对象的状态,因此为引用参数有添加了const,同时const还可以使得const对象可以作为实参(即赋值来源),因为const变量不能任意转换为非const变量。
3、判断实参和当前对象是不是同一个对象,如果是同一个就无需复制了,直接返回,调高效率。
另外对于包含指针成员的类,在定义赋值操作符重载函数时,不仅需要上述步骤还要注意不要造成内存的泄露。需要在分配新内存前释放自身已有的内存,另外对于判断实参和但却对象是不是同一个对象的要求就更加重要,没有这步则在释放当前对象自身内存的时候会造成严重错误:如果是同一对象,则释放了自身已有内存的同时也释放了实参的内存(因为是同一个),所以就找不到需要赋值的内容了,之后的操作就会出错。


原创粉丝点击