assignment operator return a reference to *this in C++

后端 未结 3 1005
南笙
南笙 2020-12-17 04:17

I read about this from \"Effective c++\" ,this is Col.10. It say it\'s a good way to have assignment operators return a reference to *this. I wrote a code snippet to test th

3条回答
  •  臣服心动
    2020-12-17 05:12

    If you remove completely the operator= method, a default operator= will be created by the compiler, which implements shallow copy1 and returns a reference to *this.

    Incidentally, when you write

    mywidget = mywidget2 = mywidget3;
    

    you're actually calling this default operator=, since your overloaded operator is designed to work with ints on the right side.

    The chained assignment will stop working, instead, if you return, for example, a value, a const reference (=>you'll get compilation errors) or a reference to something different from *this (counterintuitive stuff will start to happen).

    Partially related: the copy and swap idiom, i.e. the perfect way to write an assignment operator. Strongly advised read if you need to write an operator=


    1. The default operator= will perform as if there were an assignment between each member of the left hand operand and each member of the right hand one. This means that for primitive types it will be a "brutal" bitwise copy, which in 90% of cases isn't ok for pointers to owned resources.

提交回复
热议问题