为什么在C++中应该使用指针而不是对象本身?
大家好!我是一名初学C++的开发者,经常遇到不理解为什么代码中使用指针而不是普通对象的情况。例如,我写了一个管理游戏角色的类:
```cpp
class Monster {
public:
Monster(const std::string& name) : name(name) {}
void attack() { /* ... */ }
private:
std::string name;
};
void processMonster(Monster m) { // 按值传递对象
m.attack();
}
int main() {
Monster goblin("Goblin");
processMonster(goblin); // 拷贝!如果怪物很重呢?
return 0;
}
```
我看到很多有经验的程序员这样写:
```cpp
void processMonster(Monster* m) {
m->attack();
}
```
或者直接用`new`创建对象:
```cpp
Monster* boss = new Monster("Boss");
```
我有几个问题:
1. 如果可以直接操作对象,为什么还需要指针?
2. 什么时候应该用指针,什么时候应该用引用?
3. `M`和`M*`之间有什么区别?