在我的程序中,无论何时单击鼠标,我都会将类Laser的实例添加到向量中。后来,当更新激光运动时,我检查它是否已经经过了一定的距离,如果有,我想将它从矢量中移除。因此,我首先将激光位置与this.getPosition()的位置进行比较,然后它无法工作。所以相反,我试图使用运算符重载,所以我可以==向量中的激光和“这个”激光。我只想知道矢量中的激光是否与'this'激光相同。但它从来没有工作。这是我的代码。比较C++中对象实例的内存地址
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);
}
所以真的,所有我想要做的是比较它们的内存地址,看看他们是激光或不相同的情况下,这样我就可以从向量中删除。感谢您提前提供任何帮助,如果我一直特别无知或粗鲁或类似的话,我会很抱歉。
'(* this == rh)'不会比较地址。事实上,这将会递归调用'Laser :: operator =='并导致堆栈溢出错误。 –