In theC++ programming language, themove assignment operator= is used for transferring a temporary object to an existing object. The move assignment operator, like most C++ operators, can beoverloaded. Like thecopy assignment operator it is aspecial member function.
If the move assignment operator is not explicitly defined, thecompiler generates an implicit move assignment operator (C++11 and newer) provided thatcopy/move constructors,copy assignment operator ordestructors have not been declared.[1] The parameter of a move assignment operator is anrvalue reference (T&&) to typeT, whereT 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.
To overload the move assignment operator, the signature of the function must be:[1]
T&operator=(T&&data)
To successfully overload the move assignment operator, the following conditions must be met:
Consider the following move assignment operator for a simple string class:[2]
classString{public:String&operator=(String&&other)noexcept{// If we're not trying to move the object into itself...if(this!=&other){delete[]this->data_;// Free this string's original data.this->data_=other.data_;// Copy the other string's data pointer into this string.other.data_=nullptr;// Finally, reset the other string's data pointer.}return*this;}private:char*data_;};
Thiscomputer-programming-related article is astub. You can help Wikipedia byadding missing information. |