比较c ++中对象实例的内存地址

时间:2016-02-13 00:10:49

标签: c++ operator-overloading memory-address

在我的程序中,每当单击鼠标时,我都会向一个向量添加一个类Laser实例。之后,当更新激光器运动时,我检查它是否已经超过一定距离,如果有,我想将它从矢量中移除。所以我首先在矢量中循环比较激光位置和this.getPosition()的位置,但它从未起作用。所以我尝试使用运算符重载,所以我可以==矢量中的激光和'this'激光。我想知道的是,矢量中的激光是否与“此”激光相同。但它永远不会奏效。这是我的代码。

class Laser
{
public:
    sf::Texture texture;
    sf::Sprite sprite;
    int speed;
    sf::Vector2i startPoint;
    sf::SoundBuffer buffer;
    sf::Sound sound;
    void move(std::vector <Laser> shots);
    bool operator == (const Laser& rh)const; 
    Laser(float rot, int spd, sf::Vector2i pos);
    Laser() {};
    ~Laser();
};

和运算符重载的代码以及我实际尝试查看它是否是相同的激光器。

        int index = -1;
        for (int i = 0; i < shots.size(); i++) {
            if (*this == shots[i]) {
                index = i;
                break;
            }
        }
        if (index >= 0) {
            shots.erase(shots.begin() + index);
        }


    }

}

bool Laser::operator==(const Laser & rh) const
{
    return (*this == rh);
}

所以真的,我想要做的就是比较他们的内存地址,看看他们是否是相同的激光实例,所以我可以从矢量中删除它。如果我特别无知或粗鲁或类似的话,请提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

*thisLaserrh是激光,所以它会调用Laser::operator==
*this内部是Laser,而rh是激光,因此它会调用Laser::operator==
*this内部是Laser,而rh是激光,因此它会调用Laser::operator==
*this内部是Laser,而rh是激光,所以它会调用Laser::operator==

你看到了这个问题?如果你想要做的只是比较内存地址,那就改为做。 this是内存地址,&rh是内存地址,因此:

return this==&rh

话虽如此,这是一个可怕的想法。身份不应该是C ++中平等的基础。如果你解释真正的问题,我们可以提出一个更好的解决方案。