cpp / intermediate
Snippet
Move-Semantik mit std::move
Die Move-Semantik ermöglicht es, Ressourcen (wie Heap-Speicher) von einem Objekt auf ein anderes zu übertragen, anstatt sie zu kopieren. std::move wandelt ein Objekt in einen R-Value um, sodass der Move-Konstruktor die Daten effizient übernehmen kann.
snippet.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>#include <vector>#include <utility>int main() {std::vector<int> vec1 = {1, 2, 3, 4, 5};// Transfer ownership of resources from vec1 to vec2std::vector<int> vec2 = std::move(vec1);std::cout << "vec2 size: " << vec2.size() << std::endl;std::cout << "vec1 size: " << vec1.size() << std::endl; // Likely 0return 0;}
Erklärung
1
std::vector<int> vec2 = std::move(vec1);
Ruft den Move-Konstruktor von std::vector auf und überträgt den internen Zeiger von vec1 auf vec2.
2
vec1.size()
Nach einem Move befindet sich das Quellobjekt in einem gültigen, aber nicht näher definierten Zustand (bei Containern meist leer).