c++ - 指针内存泄漏的可能性?

标签 c++ class pointers memory-leaks

我有一个用 C++ 编写的基本 Game 类,以及一个将游戏指针作为其构造函数参数的 Character 类。我对所有这些新奇的“C++”和“指针”爵士乐还很陌生,所以如果这看起来像是一个菜鸟问题,请多多包涵。实际代码包含更多内容,但出于演示目的,我将其压缩了一点:

class Game {
  Game() { /* blah blah blah */ };
  ~Game() {};
};
class Character {
  Character(Game *game, unsigned int x, unsigned int y) {
    /* here there be dragons */
  };
  ~Character() {} // empty destructor
};

我的问题是,我是否需要在完成任何给定 Character 后删除指向主 Game 实例的指针,或者该指针是否完全与内存泄漏无关?在任何给定时间点,我在一款游戏中有 800 多个字符,因此如果指针导致内存泄漏,就会出现一些问题。

最佳答案

My question is, do I need to delete the pointer to the main Game instance after I'm done with any given Character

不一定。

指向的 Game 实例应该像所有对象一样被销毁,但是 Character 实例应该对此负责吗?

你说会有很多字符实例。考虑:还会有很多游戏实例吗?每个角色都指向自己的游戏对象吗?


如果每个角色都有自己独立的游戏,那么角色对游戏的破坏负责确实是有意义的。在那种情况下,使用指针可能意义不大,因为使用直接子对象会更简单。

但是如果许多角色都引用一个共享游戏(我怀疑是这种情况),那么单个角色就不能拥有该游戏的唯一所有权,因为一旦任何一个角色被摧毁,其他角色仍然会指着那个游戏。


这里有两种共享所有权的方法

  1. 使用生命周期比任何角色实例都长的游戏实例。例如,静态对象,或者 main 函数中的自动对象。这样,没有角色对破坏负责。棘手的部分是确保在游戏开始之前销毁所有角色实例。

  2. 使用引用计数智能指针,例如 std::shared_ptr。这样,当最后一个角色出现时,游戏就会被销毁。

关于c++ - 指针内存泄漏的可能性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48103344/

相关文章:

javascript - QtScript 无法调用参数类型为 "QString &"的函数

c++ - 为什么我的 Linux 编译的二进制文件在 Windows 上运行时不起作用?

c++ - 有条件包含的疑问

r - 将字符转换为日期的函数

c - 使用指针更改函数中数组值的问题

c - 传递声明为指向函数的指针的变量与传递未声明为指针的变量的地址是否相同?

c - 由于对齐差异,该程序是否仅在 x32 上崩溃?

c++ - Kinect + Visual Studio 2013 LNK 错误,如何正确链接库?

怪物的 C++ vector

java - 将值设置为对象数组