比较c ++中对象实例的内存地址
comparing memory addresses of object instances in c++
在我的程序中,每当单击鼠标时,我都会将 class Laser 的实例添加到向量中。稍后,在更新激光运动时,我会检查它是否已经移动了一定距离,如果已经移动,我想将其从矢量中移除。因此,我首先将激光位置与 this.getPosition() 的位置进行比较,然后遍历矢量,但它从未奏效。所以我尝试使用运算符重载,这样我就可以 == 向量中的激光和 'this' 激光。我只想知道矢量中的激光是否与 '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);
}
所以真的,我想做的就是比较它们的内存地址,看看它们是否是相同的激光实例,这样我就可以从向量中删除它。提前感谢您的帮助,如果我特别无知或粗鲁或类似的事情,我深表歉意。
*this
是Laser
,rh
是激光,所以叫Laser::operator==
.
而那个*this
里面是一个Laser
,rh
是一个激光,所以叫Laser::operator==
.
而那个*this
里面是一个Laser
,rh
是一个激光,所以叫Laser::operator==
.
而那个*this
里面是一个Laser
,rh
是一个激光,所以叫Laser::operator==
.
你看到问题了吗?如果您只想比较内存地址,那么就这样做。 this
是内存地址,&rh
是内存地址,所以:
return this==&rh
话虽这么说,但这是个糟糕的主意。身份不应该是 C++ 中平等的基础。如果您解释真正的问题,我们可以提出更好的解决方案。
在我的程序中,每当单击鼠标时,我都会将 class Laser 的实例添加到向量中。稍后,在更新激光运动时,我会检查它是否已经移动了一定距离,如果已经移动,我想将其从矢量中移除。因此,我首先将激光位置与 this.getPosition() 的位置进行比较,然后遍历矢量,但它从未奏效。所以我尝试使用运算符重载,这样我就可以 == 向量中的激光和 'this' 激光。我只想知道矢量中的激光是否与 '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);
}
所以真的,我想做的就是比较它们的内存地址,看看它们是否是相同的激光实例,这样我就可以从向量中删除它。提前感谢您的帮助,如果我特别无知或粗鲁或类似的事情,我深表歉意。
*this
是Laser
,rh
是激光,所以叫Laser::operator==
.
而那个*this
里面是一个Laser
,rh
是一个激光,所以叫Laser::operator==
.
而那个*this
里面是一个Laser
,rh
是一个激光,所以叫Laser::operator==
.
而那个*this
里面是一个Laser
,rh
是一个激光,所以叫Laser::operator==
.
你看到问题了吗?如果您只想比较内存地址,那么就这样做。 this
是内存地址,&rh
是内存地址,所以:
return this==&rh
话虽这么说,但这是个糟糕的主意。身份不应该是 C++ 中平等的基础。如果您解释真正的问题,我们可以提出更好的解决方案。