learncpp-21 操作符重载

21 操作符重载

21.12 重载赋值运算符

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

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

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

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

posted @ 2024-07-22 22:23  dengkang1122  阅读(1)  评论(0编辑  收藏  举报