¿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;
}
```