Content deleted Content added
Add noexcept to example |
m Added some other conditions that are needed for the compiler to generate a move assignment operator implicitly |
||
Line 1:
In the [[C++|C++ programming language]], the '''move assignment operator''' <code>=</code> is used for transferring a temporary object to an existing object. The move assignment operator, like most C++ operators, can be [[Operator overloading|overloaded]]. Like the [[copy assignment operator]] it is a [[special member functions|special member function]].
If the move assignment operator is not explicitly defined, the [[compiler]] generates an implicit move assignment operator ([[C++11]] and newer) provided that [[Copy constructor (C++)|copy]]/[[C++11|move constructors]], [[Assignment operator (C++)|copy assignment operator]] or [[Destructor (computer programming)|destructors]] have not been declared<ref name=":0" />. The parameter of a move assignment operator is an [[rvalue reference]] (T&&) to type ''T'', where ''T'' is the object that defines the move assignment operator. The move assignment operator is different than a [[move constructor]] because a move assignment operator is called on an existing object, while a move constructor is called on an object created by the operation. Thereafter, the other object's data is no longer valid.
== Overloading move assignment operator ==
To overload the move assignment operator, the signature of the function must be:<ref name=":0">{{Cite web|title = Move assignment operator - cppreference.com|url = http://en.cppreference.com/w/cpp/language/move_assignment|website = en.cppreference.com|access-date = 2016-02-23}}</ref><syntaxhighlight lang="c++">
T& operator=(T&& data)
</syntaxhighlight>To successfully overload the move assignment operator, the following conditions must be met:
|