首页 > 解决方案 > 检测是否调用了析构函数

问题描述

我正在制作一个棋盘游戏,当一个棋子被摧毁时游戏结束,例如一个国王在国际象棋中死去。

现在我有可能搜索我所有的对象并看到例如有两个指向国王对象的指针,现在只有一个,因此游戏结束,剩下的国王队获胜。

然而,我想知道是否可以这样说:

if(king_destructor is called){
     game over;}

但经过一番搜索后,我还没有找到一种方法来做到这一点。

更具体地说,我的班级结构是:

class pieces{}
class king : public pieces{}

其中pieces 是一个抽象类,每个单独的部分都有派生类。在“国王”部分的派生类中有它的析构函数。除此以外:

class game_board{}

这是另一个具有数据成员的抽象类,这些数据成员是指向片段对象的指针。确切地说,我有一个 map 变量,它将棋子在棋盘上的位置作为键,将指向棋子对象的指针作为值。

最后我有一个派生类:

class game_rules: public game_board{}

在这个类中,我有一个函数可以检测游戏何时结束。

我尝试使用由“国王”析构函数修改的静态变量,但这超出了我的 game_rules 类的范围。

有谁知道这是否可能?

标签: c++visual-c++destructor

解决方案


可能有几种方法可以实现这样的东西。你的描述让我印象深刻的是从棋盘位置到棋子指针的地图。你没有指定什么样的指针,所以我会即兴发挥。假设地图持有指向片段的共享指针。然后game_board可以保持指向s 的弱指针king您可以简单地查看弱指针是否已过期,而不是搜索所有部分。这不仅可以告诉您游戏是否结束,还可以告诉您谁输了。


推荐阅读