正在检测是否调用了析构函数



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

现在我有可能搜索我所有的对象,看到有两个指向国王对象的指针,而现在只有一个,所以比赛结束了,剩下国王的球队赢了。

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

if(king_destructor is called){
game over;}

但经过一番搜寻,我还是没找到办法。

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

class pieces{}
class king : public pieces{}

其中pieces是一个抽象类,每个单独的piece都有派生类。在"king"片段的派生类中,有它的析构函数。否则:

class game_board{}

其是另一个抽象类,其具有作为片段对象的指针的数据成员。确切地说,我有一个map变量,它以工件在板上的位置为键,以指向工件对象的指针为值。

最后我有一个派生类:

class game_rules: public game_board{}

正是在这个类中,我有一个功能,可以检测游戏何时结束。

我尝试使用一个由"king"析构函数修改的静态变量,但这超出了game_rules类的范围。

有人知道这是否可能吗?

我尝试使用一个由"king"析构函数修改的静态变量,但这超出了我的game_rules类的范围。

这似乎是合理的。我不明白为什么范围是个问题。该变量对于king类是私有的,但具有公共只读访问权限。

class king : public piece {
public:
static unsigned count() { return instance_count; }
private:
static unsigned instance_count;
};

(当然,类定义的其余部分也会放在那里。(

game_rules的源文件中,您将使用#include "king.hpp"(或您为该头文件命名的任何名称(,并使用表达式king::count()获得国王计数的值。(可以在没有该类型对象的情况下调用静态成员函数。(例如,您可以编写以下内容。

if ( king::count() <= 1 ) {
// Game over
}

可能有几种方法可以实现这样的东西。你的描述让我印象深刻的是从棋盘位置到指针到碎片的地图。你没有具体说明什么样的指针,所以我会即兴发挥。假设映射包含指向碎片的共享指针。然后game_board可以维护指向kings的弱指针。您可以简单地查看弱指针是否过期,而不是搜索所有的片段。这不仅能告诉你比赛是否结束,还能告诉你输了。

最新更新