0

我正在使用 C++ 开发游戏。我在很多地方读到过,基本上应该不惜一切代价避免在 C++ 中使用指针。我仍在学习 C++,对此感到有些困惑。

我想要一个持久的玩家对象,并且在游戏会话期间存在。该对象将包含玩家库存、玩家统计信息等。

玩家的物品栏基本上只是一个包含物品对象的向量(我创建的“物品”类)。

如果有人可以澄清以下内容,它将消除我的困惑:

  1. 当人们说“指针不好”时,他们是指标准 C++ 指针吗?智能指针被认为是“好的”吗?
  2. 除了指针之外,我还能如何访问分配在堆上的持久对象?
  3. 如果我想要一种在玩家库存中找到物品的方法,但如果找不到该物品则返回 NULL,那么在没有指针的情况下如何实现呢?由于从“findItem”返回的项目应该是可编辑的(例如更改项目计数),目前我返回一个指向向量中项目的指针。这是对指针的有效使用吗?

任何帮助将非常感激!

4

2 回答 2

1
  1. 是的,原始的 C 风格指针被认为是不好的。智能指针没问题。在某些情况下,您需要使用(智能)指针 - 多态对象的集合,例如:std::vector<std::unique_ptr<IObject> >.

  2. 持久对象不必在堆上。它可以是一个具有静态存储持续时间的对象,甚至可以是一个寿命足够长的自动对象- 即您可以在main().

  3. 多种方式 - 您可以抛出异常(可能过于苛刻)或std采用返回迭代器的方式 - 类似于.end().

于 2012-10-10T11:32:15.610 回答
1

我个人建议使用共享指针(来自 boost 或 std)。不要使用原始指针。C++ 还有其他智能指针,比如 auto_ptr,但现在几乎没有人使用它们。如果要在堆上分配一些东西,请执行以下操作:

std::shared_ptr<ClassA> A(new ClassA());

这比使用原始指针更安全。当您超出范围时,共享指针将向您保证它指向的对象将被销毁。原始指针没有这样做,这意味着您必须自己手动销毁所有内容

于 2012-10-10T11:54:44.240 回答