Avatar ·

¿Por qué en C++ es mejor pasar objetos por puntero y no por valor?

¡Hola a todos! Acabo de empezar a aprender C++ después de Java, y tengo un malentendido con los punteros. En Java, cuando escribo `MyClass obj = new MyClass()`, siempre trabajo con una referencia al objeto. Pero en C++ puedo escribir tanto `MyClass obj;` como `MyClass* obj = new MyClass();`. Y aquí es donde me pierdo. Supongamos que tengo una función que recibe un objeto y hace algo con él: ```cpp void processData(MyClass data) { // modificamos data data.setValue(42); } int main() { MyClass myObj; myObj.setValue(10); processData(myObj); // myObj.getValue() sigue siendo 10, ¡no 42! ¿Por qué? return 0; } ``` Esperaba que después de llamar a `processData` el valor cambiara, pero no sucedió. Tuve que reescribirlo con punteros: ```cpp void processData(MyClass* data) { data->setValue(42); } int main() { MyClass* myObj = new MyClass(); myObj->setValue(10); processData(myObj); // Ahora myObj->getValue() == 42 delete myObj; return 0; } ```