何时在游戏开发中使用C ++指针

时间:2012-03-03 03:21:59

标签: c++ pointers

我查看过一堆文章,大多数人讲的是同一个故事:除非必须,否则不要使用指针。来自C#/ Java背景,其中内存全部被管理,我完全不知道何时适合使用指针,除了这些情况:

  • 动态内存(如可变大小的数组)
  • 多态性

什么时候我会使用指针,特别是在gamedev的上下文中?

4 个答案:

答案 0 :(得分:6)

"不要使用指针,他们会慢下来" 没有意义(至少不是C ++)。

这就像说,"不要使用变量,他们会慢下来"

  • 您的意思是,"不要使用动态内存分配"?
    如果是这样的话:我认为你现在不应该担心它。首先编写代码,然后再进行优化。

  • 或者您的意思是说,"不要使用原始指针(即类型foo*)",这将需要newdelete
    如果是这样,那就是好建议:您通常需要智能指针来代替shared_ptrunique_ptr来管理对象,而不是处理原始指针。在大多数C ++代码中,您不应该使用newdelete,即使这看起来很自然。
    但他们仍然是引擎盖下的指针!

  • 或者你的意思是什么?

附录

感谢下面的@ bames53指出这一点:

如果传递副本是一个选项(即当你传递数据量时,不是一个巨大的结构或一个可能大于一些寄存器,例如~16字节的数量级),使用指针(或引用)来传递数据;而是通过副本传递。它允许编译器以这种方式更好地进行优化。

答案 1 :(得分:3)

指针的一个主要用途(尽管引用通常在可能的情况下通常更好),是能够在没有复制的情况下传递对象。如果一个对象包含大量数据,那么复制它可能非常昂贵且不必要。在游戏开发方面,您可以将指针存储在像std::vector这样的容器中,这样您就可以管理游戏中的对象。例如,你可以有一个包含指向游戏中所有敌人的指针的向量,这样你就可以对它们执行一些“大规模程序”。研究智能指针也许是值得的,因为这些可以让你的生活变得更轻松(它们在防止内存泄漏方面有很大的帮助)。

答案 2 :(得分:2)

这个想法是你不想让内存泄漏,也不想在检索内存时减慢程序,所以,如果你预先分配你需要的结构,那么你可以使用指针传递结构,因为这比复制结构更快。

我认为你很困惑为什么指针可能被认为是坏的,因为有很多地方可以使用它们,你只需要考虑你为什么这样做。

答案 3 :(得分:1)

您不需要可变大小数组的指针,您可以(通常应该)使用std::vector代替。你也不需要用于多态的原始指针;虚函数适用于unique_ptr等智能指针。

在现代C ++中,你很少需要指针。通常它们会被隐藏在资源拥有的类中,如矢量。要传递对象而不复制它们,您可以使用引用。指针的大多数剩余用法都被智能指针覆盖。很少你会想要一个'非拥有'指针,在这种情况下,原始指针就可以了。

如果你了解应该使用的东西而不是指针,你将学习指针的适当用法。所以要了解RAII,参考资料和smart_pointers。