¿Por qué debería usar un puntero en lugar del objeto mismo en C++?
¡Hola a todos! Soy un desarrollador principiante de C++ y a menudo me encuentro en situaciones donde no entiendo por qué en el código se usan punteros en lugar de objetos normales. Por ejemplo, escribo una clase para gestionar un personaje de juego:
```cpp
class Monster {
public:
Monster(const std::string& name) : name(name) {}
void attack() { /* ... */ }
private:
std::string name;
};
void processMonster(Monster m) { // Paso el objeto por valor
m.attack();
}
int main() {
Monster goblin("Goblin");
processMonster(goblin); // ¡Copia! ¿Y si el monstruo es pesado?
return 0;
}
```
Veo que muchos programadores experimentados escriben así:
```cpp
void processMonster(Monster* m) {
m->attack();
}
```
O incluso crean objetos con `new`:
```cpp
Monster* boss = new Monster("Boss");
```
Tengo varias preguntas:
1. ¿Para qué sirven los punteros si puedo trabajar directamente con objetos?
2. ¿Cuándo es mejor usar un puntero y cuándo una referencia?
3. ¿Cuál es la diferencia entre `M