我有一个用 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
实例应该对此负责吗?
你说会有很多字符实例。考虑:还会有很多游戏实例吗?每个角色都指向自己的游戏对象吗?
如果每个角色都有自己独立的游戏,那么角色对游戏的破坏负责确实是有意义的。在那种情况下,使用指针可能意义不大,因为使用直接子对象会更简单。
但是如果许多角色都引用一个共享游戏(我怀疑是这种情况),那么单个角色就不能拥有该游戏的唯一所有权,因为一旦任何一个角色被摧毁,其他角色仍然会指着那个游戏。
这里有两种共享所有权的方法
使用生命周期比任何角色实例都长的游戏实例。例如,静态对象,或者
main
函数中的自动对象。这样,没有角色对破坏负责。棘手的部分是确保在游戏开始之前销毁所有角色实例。使用引用计数智能指针,例如
std::shared_ptr
。这样,当最后一个角色出现时,游戏就会被销毁。
关于c++ - 指针内存泄漏的可能性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48103344/