【发布时间】:2020-05-09 05:16:46
【问题描述】:
我正在制作一款棋盘游戏,当一个棋子被摧毁时游戏结束,例如一位国王死于国际象棋。
现在我可以搜索我所有的对象并看到,例如,有两个指向国王对象的指针,现在只有一个,因此游戏结束,剩下国王的球队获胜。
然而,我想知道是否可以这样说:
if(king_destructor is called){
game over;}
但经过一番搜索后,我还没有找到一种方法来做到这一点。
更具体地说,我的班级结构是:
class pieces{}
class king : public pieces{}
其中pieces 是一个抽象类,每个单独的pieces 都有派生类。在“国王”部分的派生类中有它的析构函数。 否则:
class game_board{}
这是另一个抽象类,它具有指向片段对象的数据成员。确切地说,我有一个 map 变量,它以棋子在棋盘上的位置为键,以指向棋子对象的指针为值。
我终于有了一个派生类:
class game_rules: public game_board{}
在这个类中,我有一个函数可以检测游戏何时结束。
我尝试使用由“king”析构函数修改的静态变量,但这超出了我的 game_rules 类的范围。
有人知道这是否可能吗?
【问题讨论】:
-
为什么不确保
static变量在正确的范围内?这种方法应该可以正常工作。 -
检查地图是否包含国王?检查国王是否是
nullptr?king在调用其析构函数时是否调用了回调函数?除此之外,您无法在调用析构函数后访问king变量,而且我认为除了跟踪状态或检查其指针是否为空之外,没有其他方法可以检查是否已释放某些内容。 -
检查地图是否包含我可以做的国王,但我想知道是否有比循环遍历整个地图更优雅的方法。据我所知,如果不遍历每个键,我无法在地图中找到某种类型的所有对象,但如果可能的话,那将非常有趣!
-
我会尝试更多地使用静态变量。感谢您的建议
标签: c++ visual-c++ destructor