Content deleted Content added
mNo edit summary |
Monospace |
||
(29 intermediate revisions by 22 users not shown) | |||
Line 1:
{{Short description|Operator used in C++}}
In the [[C++|C++ programming language]], the '''move assignment operator''' <code>=</code>
If the move assignment operator is not explicitly defined,
▲In the [[C++|C++ programming language]], the move assignment operator <code>=</code>, is used for transferring ownership (moving) of a temporary object to another existing object. The move assignment operator, like most of the other C++ operators, can be [[Operator overloading|overloaded]]. It is one the of the [[special member functions]].<ref>{{Cite journal|title = Special member functions|url = https://en.wikipedia.org/w/index.php?title=Special_member_functions&oldid=662581955|journal = Wikipedia, the free encyclopedia|language = en}}</ref>
▲If the move assignment operator is not explicitly defined, then the compiler will generate an implicit move assignment operator ([[C++11]] and newer). The parameter of a move assignment operator is an [[rvalue reference]] (T&&) to type ''T''; ''T'' being 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, as a move constructor would be called on an object being created. One must somehow also signify the other object's data is not valid anymore, and has been moved.
== Overloading move assignment operator ==
To overload the move assignment operator, the signature of the function must be
T& operator=(T&& data)
</syntaxhighlight>To successfully overload the move assignment operator, the following conditions must be met:
Line 14 ⟶ 11:
* The current object's data is de-allocated.
* The object that is being moved from must have its data marked as [[nullptr]] (or something to signify the move)
* The operator
public:▼
Resource& operator=(Resource&& other) {▼
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"▼
class String {
▲ public:
// If we're not trying to move the object into itself...
▲
return *this;▼
}
private:
};
</syntaxhighlight>
==References==
<references />
{{C++ programming language}}
[[Category:C++]]
[[Category:Operators (programming)]]
[[Category:Assignment operations]]
{{compu-prog-stub}}
|