learncpp-21 操作符重载

21 操作符重载

21.12 重载赋值运算符

  • 拷贝构造器和拷贝赋值运算符的作用几乎相同,都是将一个对象复制到另一个对象。但是拷贝构造器初始化新的对象,而赋值运算符替换已有对象的内容

如果在拷贝前必须创建一个新对象,则使用拷贝构造器(包括按值传递和按值返回)
如果在拷贝前无需创建一个新对象,则使用赋值运算符
判断是调用拷贝构造器还是调用赋值运算符,主要看是否有新的对象产生。如果有就是调用拷贝构造器,如果没有就是调用赋值运算符

  • 拷贝赋值运算符必须重载为成员函数
  • 当拷贝赋值运算符涉及到动态内存分配时,自赋值就可能出问题
  • 如果没有显式定义拷贝赋值运算符,则编译器会隐式提供一个公共的拷贝赋值运算符。这个拷贝运算符进行成员间的赋值(与默认的拷贝构造器一样)

如果类有const成员,那么编译器会将隐式的拷贝赋值运算符定义为deleted,这是因为const成员不能被赋值,因此编译器假定这个类是不可赋值的
如果想让一个带有const成员的类可以被赋值,需要显式重载赋值运算符并且手动给每个非const成员赋值

posted @   dengkang1122  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示