Was ist Move-Semantik in C++11 und warum wird sie benötigt?
Hallo! Ich habe gerade angefangen, C++11 zu lernen, und bin auf den Begriff „move semantics“ gestoßen. Ich verstehe irgendwie, dass es etwas mit Performance zu tun hat, aber in der Praxis komme ich nicht klar.
Angenommen, ich habe eine solche Klasse:
```cpp
class MyString {
public:
MyString(const char* str) : data_(new char[strlen(str) + 1]) { strcpy(data_, str); }
~MyString() { delete[] data_; }
MyString(const MyString& other) : data_(new char[strlen(other.data_) + 1]) { strcpy(data_, other.data_); }
char* data_;
};
```
Ich schreibe eine Funktion, die `MyString` zurückgibt:
```cpp
MyString createHello() {
MyString s("Hello, World!");
return s; // Was passiert hier? Kopieren?
}
```
Mit dem alten C++03 wurde bei der Rückkehr aus der Funktion der Kopierkonstruktor aufgerufen, der neuen Speicher allokierte und die Daten kopierte. Das ist teuer. Aber ich habe gehört, dass man in C++11 die Daten irgendwie „verschieben“ kann, um das Kopieren zu vermeiden. Wie funktioniert das? Was sind rvalue-Referenzen und std::move? Wann werden sie...
Noch keine Antworten.
Anmelden um eine Antwort zu hinterlassen