¿Qué es copy elision y optimización del valor de retorno (RVO) en C++?
¡Hola a todos! Estoy aprendiendo C++ y me encontré con los términos "copy elision" y "return value optimization" (RVO). Honestamente, no entiendo del todo qué son y para qué sirven.
Tengo una clase simple que hace algo en el constructor y destructor:
```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; // ¿Aquí ocurre una copia?
}
int main() {
MyClass result = createObject();
return 0;
}
```
Cuando ejecuto este código, espero ver: "Constructor", luego "Copy constructor" (al retornar de la función), luego otra vez "Copy constructor" (al asignar result), y luego dos destructores. Pero en la práctica solo veo "Constructor" y "Destructor". ¿Por qué el compilador omite las llamadas al copy constructor? ¿Esto es copy elision?