learncpp-21 操作符重载
21 操作符重载
21.12 重载赋值运算符
- 拷贝构造器和拷贝赋值运算符的作用几乎相同,都是将一个对象复制到另一个对象。但是拷贝构造器初始化新的对象,而赋值运算符替换已有对象的内容
如果在拷贝前必须创建一个新对象,则使用拷贝构造器(包括按值传递和按值返回)
如果在拷贝前无需创建一个新对象,则使用赋值运算符
判断是调用拷贝构造器还是调用赋值运算符,主要看是否有新的对象产生。如果有就是调用拷贝构造器,如果没有就是调用赋值运算符
- 拷贝赋值运算符必须重载为成员函数
- 当拷贝赋值运算符涉及到动态内存分配时,自赋值就可能出问题
- 如果没有显式定义拷贝赋值运算符,则编译器会隐式提供一个公共的拷贝赋值运算符。这个拷贝运算符进行成员间的赋值(与默认的拷贝构造器一样)
如果类有const成员,那么编译器会将隐式的拷贝赋值运算符定义为
deleted
,这是因为const成员不能被赋值,因此编译器假定这个类是不可赋值的
如果想让一个带有const成员的类可以被赋值,需要显式重载赋值运算符并且手动给每个非const成员赋值
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律