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;
}
```
No answers yet.
Faça login para deixar uma resposta