Qu'est-ce que l'élision de copie (copy elision) et l'optimisation de la valeur de retour (RVO) en C++ ?
Bonjour à tous ! J'apprends le C++ et je suis tombé sur les termes "copy elision" et "return value optimization" (RVO). Honnêtement, je ne comprends pas tout à fait ce que c'est et à quoi cela sert.
J'ai une classe simple qui fait quelque chose dans le constructeur et le destructeur :
```cpp
#include
class MyClass {
public:
MyClass() { std::cout << "Constructor\n"; }
MyClass(const MyClass&) { std::cout << "Copy constructor\n"; }
~MyClass() { std::cout << "Destructor\n"; }
};
MyClass createObject() {
MyClass obj;
return obj; // Est-ce qu'une copie a lieu ici ?
}
int main() {
MyClass result = createObject();
return 0;
}
```
Quand j'exécute ce code, je m'attends à voir : "Constructor", puis "Copy constructor" (lors du retour de la fonction), puis à nouveau "Copy constructor" (lors de l'affectation à result), puis deux destructeurs. Mais en pratique, je vois seulement "Constructor" et "Destructor". Pourquoi le compilateur saute-t-il les appels au constructeur de copie ? C'est cela l'élision de copie.
No answers yet.
Connectez-vous pour laisser une réponse
Blogs
Pourquoi la navigation Android se casse : IllegalArgumentException et NavController
Mémoire et ramasse-miettes en Java : ce qui se passe vraiment sous le capot
Feature flags en PHP : activez des fonctionnalités sans déploiement ni stress