Avatar ·

Por que em C++ é melhor passar objetos por ponteiro, e não por valor?

Olá a todos! Comecei a estudar C++ recentemente, depois de Java, e fiquei confuso com ponteiros. Em Java, quando escrevo `MyClass obj = new MyClass()`, sempre trabalho com uma referência ao objeto. Mas em C++ posso escrever tanto `MyClass obj;` quanto `MyClass* obj = new MyClass();`. E é aqui que me perco. Suponha que eu tenha uma função que recebe um objeto e faz algo com ele: ```cpp void processData(MyClass data) { // modificamos data data.setValue(42); } int main() { MyClass myObj; myObj.setValue(10); processData(myObj); // myObj.getValue() ainda é 10, não 42! Por quê? return 0; } ``` Eu esperava que após chamar `processData` o valor mudasse, mas isso não aconteceu. Tive que reescrever usando ponteiros: ```cpp void processData(MyClass* data) { data->setValue(42); } int main() { MyClass* myObj = new MyClass(); myObj->setValue(10); processData(myObj); // Agora myObj->getValue() == 42 delete myObj; return 0; } ```