move assignment operator
Megjelenés
Főnév
move assignment operator (tsz. move assignment operators)
- (informatika) A move assignment operator C++-ban egy speciális operátor, amely lehetővé teszi egy objektum erőforrásainak átvételét (áthelyezését) egy másik objektumtól, ahelyett hogy lemásolná azokat. Ezzel elkerülhetjük a fölösleges másolásokat, ami különösen hasznos, ha az objektum nagy vagy drága erőforrásokat (például dinamikusan lefoglalt memóriát, fájl leírókat stb.) kezel.
Magyarul a move assignment operator jelentése: mozgató értékadó operátor (szokták még úgy is mondani: áthelyező értékadó operátor).
Miért van rá szükség?
Ha például egy objektum egy dinamikus tömböt tartalmaz, és az egyik objektumból a másikba értékadás történik, akkor:
- másoló értékadásnál a tömb lemásolódna, ami költséges.
- mozgató értékadásnál a tömb "átköltözik" az új objektumba, a régi pedig kiürül.
Szintaxis
A mozgató értékadó operátor a következőképpen néz ki:
ClassName& operator=(ClassName&& other) noexcept;
ClassName&& other— az argumentum egy rvalue reference (ideiglenes vagy költözhető objektum).noexcept— opcionális, de ajánlott, hogy jelezze: a művelet nem dob kivételt.
Példa
#include <iostream>
#include <utility> // std::move
class MyVector {
int* data;
size_t size;
public:
MyVector(size_t s) : size(s), data(new int[s]) {
std::cout << "Constructed\n";
}
~MyVector() {
delete[] data;
std::cout << "Destroyed\n";
}
// Move assignment operator
MyVector& operator=(MyVector&& other) noexcept {
std::cout << "Move assignment\n";
if (this != &other) {
delete[] data; // töröljük a jelenlegi adatokat
data = other.data; // átvesszük az erőforrást
size = other.size;
other.data = nullptr; // az eredeti objektumot "üresre állítjuk"
other.size = 0;
}
return *this;
}
void print() const {
std::cout << "Size: " << size << ", Data ptr: " << data << '\n';
}
};
int main() {
MyVector v1(5);
MyVector v2(10);
v2 = std::move(v1); // itt a move assignment operátor fog meghívódni
v1.print(); // kiürült
v2.print(); // átvette az erőforrásokat
}
Folyamat lépései
- Előző erőforrás törlése (ha van).
- Erőforrás átvétele az
otherobjektumtól. otherobjektum "kiürítése", hogy ne próbálja meg kétszer felszabadítani ugyanazt a memóriát.
Összefoglalva
- A mozgató értékadó operátor lehetővé teszi, hogy az objektumok hatékonyan "ellopják" egymás erőforrásait a másolás helyett.
- Így jelentősen javítja a teljesítményt, főleg nagy objektumok esetén.
- C++11-től érhető el a
std::moveés az rvalue referenciák bevezetésével.
- move assignment operator - Szótár.net (en-hu)
- move assignment operator - Sztaki (en-hu)
- move assignment operator - Merriam–Webster
- move assignment operator - Cambridge
- move assignment operator - WordNet
- move assignment operator - Яндекс (en-ru)
- move assignment operator - Google (en-hu)
- move assignment operator - Wikidata
- move assignment operator - Wikipédia (angol)