Por que usar um ponteiro em vez do próprio objeto em C++?
Olá a todos! Sou um desenvolvedor C++ iniciante e frequentemente me deparo com situações em que não entendo por que no código usam ponteiros em vez de objetos comuns. Por exemplo, estou escrevendo uma classe para gerenciar um personagem de jogo:
```cpp
class Monster {
public:
Monster(const std::string& name) : name(name) {}
void attack() { /* ... */ }
private:
std::string name;
};
void processMonster(Monster m) { // Passo o objeto por valor
m.attack();
}
int main() {
Monster goblin("Goblin");
processMonster(goblin); // Cópia! E se o monstro for pesado?
return 0;
}
```
Vejo que muitos programadores experientes escrevem assim:
```cpp
void processMonster(Monster* m) {
m->attack();
}
```
Ou até criam objetos com `new`:
```cpp
Monster* boss = new Monster("Boss");
```
Tenho várias perguntas:
1. Para que servem os ponteiros, se posso simplesmente trabalhar com objetos?
2. Quando é melhor usar um ponteiro, e quando uma referência?
3. Qual é a diferença entre `M