如果(玩家[p] .setcoin(游戏板,输入)),为什么它会调用Gameboard游戏板的析构函数

时间:2017-04-19 09:40:39

标签: c++ destructor

在main中我有以下代码:

Gameboard gameboard(8, 5);
HumanPlayer hp1('A'), hp2('B');
HumanPlayer players[2];
players[0] = hp1;
players[1] = hp2;
gameboard.show();
//int p = player
int input, p = 0;
while (cin >> input)
{
    switch (input)
    {
    case 1:
        if (players[p].setcoin(gameboard, input))
        .
        .
        .

在类HumanPlayer中,我调用gameboard的功能并将其返回

bool HumanPlayer::setcoin(Gameboard g, int row)
{
    return g.setstone(name, row);
}

在Gameboard类中我设置了硬币(如果它已满,我会返回false)

bool Gameboard::setstone(char player, int row) 
{
    for (int y = height; y >= 0; y--)
    {
        //row-1 da das array bei 0 beginnt
        if (elements[y][row-1] == '.')
        {
            elements[y][row-1] = player;
            return true;
        }
     }
     return false;
}

1 个答案:

答案 0 :(得分:2)

此功能通过复制传递Gameboard:

bool HumanPlayer::setcoin(Gameboard g, int row)
{
    return g.setstone(name, row);
}

这意味着你在函数中使用g所做的一切都不会对你传入它的原始文件产生影响。在函数结束时,g的副本被破坏。

如果您不想这样做,请使用:

bool HumanPlayer::setcoin(Gameboard& g, int row)
{
    return g.setstone(name, row);
}

&符号表示您要传递引用,这不会导致复制。

也许this question可能对您有用。