Qu'est-ce que la sémantique de déplacement (move semantics) en C++11 et pourquoi est-elle nécessaire ?
Bonjour ! Je viens de commencer à étudier C++11 et je suis tombé sur le terme « move semantics ». J'ai l'impression de comprendre que cela a un lien avec la performance, mais en pratique, je n'arrive pas à m'y retrouver.
Supposons que j'ai une classe comme celle-ci :
```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_;
};
```
J'écris une fonction qui retourne `MyString` :
```cpp
MyString createHello() {
MyString s("Hello, World!");
return s; // Que se passe-t-il ici ? Une copie ?
}
```
En utilisant l'ancien C++03, lors du retour de la fonction, le constructeur de copie était appelé, ce qui allouait une nouvelle mémoire et copiait les données. C'est coûteux. Mais j'ai entendu dire qu'en C++11, on peut en quelque sorte « déplacer » les données pour éviter la copie. Comment cela fonctionne-t-il ? Que sont les rvalue references et std::move ? Quand les utiliser ?
No answers yet.
Connectez-vous pour laisser une réponse