Move assignment operator

In the C++ programming language, the move assignment operator = is used for transferring a temporary object to an existing object. The move assignment operator, like most C++ operators, can be overloaded. Like the copy assignment operator it is a special member function.

If the move assignment operator is not explicitly defined, the compiler generates an implicit move assignment operator (C++11 and newer). 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:[1]

T& operator=(T&& data)

To successfully overload the move assignment operator, the following conditions must be met:

An implementation of the move assignment operator:[2]

class Resource {

public:

    Resource& operator=(Resource&& other) {
    
        if (this != &other) {           // If the object isn't being called on itself
            delete this->data;          // Delete the object's data
            this->data = other.data;    // "Move" other's data into the current object
            other.data = nullptr;       // Mark the other object as "empty"
        }
        return *this;                   // return *this
    }

    void* data;

};

A more practical example:

class String {

public:

    String& operator=(String&& otherString) {
    
        if (this != &otherString) {
            delete text;
            this->text = otherString.text;
            otherString.text = nullptr;
        }
        return *this;
    }

    char* text;

};

References

  1. "Move assignment operator - cppreference.com". en.cppreference.com. Retrieved 2016-02-23.
  2. "Move Constructors and Move Assignment Operators (C++)". msdn.microsoft.com. Retrieved 2016-02-23.


This article is issued from Wikipedia - version of the 9/2/2016. The text is available under the Creative Commons Attribution/Share Alike but additional terms may apply for the media files.