capypad
0 Tage Serie
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
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 vec2
std::vector<int> vec2 = std::move(vec1);
std::cout << "vec2 size: " << vec2.size() << std::endl;
std::cout << "vec1 size: " << vec1.size() << std::endl; // Likely 0
return 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).