Avatar ·

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.