声明类时,类会自动生成默认复制运算符。原型如下:
Class_name& Class_name::operator=(const Class_name &);
1、赋值运算符何时使用:
Class_name a = b; //这种肯定调用复制构造函数,可能调用赋值运算符
具体讲解如下:
2、存在问题
浅复制:对于new的动态内存指针成员,只复制了指针值,未开辟空间。同默认复制构造函数相同问题。
3、解决方法
自定义赋值运算符,实现深度复制(深拷贝)。
定义重载赋值运算符需考虑内容:
例子:
注:
深度复制需要访问私有成员,可以访问的原因:
C++中本类对象作为参数,可以直接访问其私有成员:
详细解释
即,可在同一类内进行对象私有成员访问操作;封装性针对类外。
参考资料:
C++ Primer Plus: 章节:12.1.4