Avatar ·

O que é copy elision e otimização do valor de retorno (RVO) em C++?

Olá a todos! Estou estudando C++ e me deparei com os termos "copy elision" e "return value optimization" (RVO). Sinceramente, não entendo muito bem o que são e para que servem. Eu tenho uma classe simples que faz algo no construtor e destrutor: ```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; // Aqui ocorre cópia? } int main() { MyClass result = createObject(); return 0; } ``` Quando executo este código, espero ver: "Constructor", depois "Copy constructor" (ao retornar da função), depois novamente "Copy constructor" (ao atribuir result), e então dois destrutores. Mas na prática vejo apenas "Constructor" e "Destructor". Por que o compilador omite as chamadas do copy constructor? Isso é copy elision?