首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >比较c++中对象实例的内存地址

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

Stack Overflow用户
提问于 2016-02-13 00:10:48
回答 1查看 1.2K关注 0票数 0

在我的程序中,每当单击鼠标时,我就向向量中添加一个类激光的实例。稍后,当更新激光运动时,我检查它是否经过了一定的距离,如果有,我想把它从矢量中移除。因此,我首先遍历矢量,比较激光的位置和this.getPosition()的位置,但是它从未起作用。因此,我尝试使用操作符重载,这样我可以==激光在矢量和‘这个’激光器。我只想知道矢量中的激光是否和“这个”激光是一样的。但从来都不起作用。这是我的密码。

代码语言:javascript
运行
复制
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();
};

以及操作符过载的代码,我试着看看是否是同一台激光器。

代码语言:javascript
运行
复制
        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);
}

所以,我想要做的就是比较它们的内存地址,看看它们是否是相同的激光实例,这样我就可以从向量中删除它。谢谢你提前提供帮助,如果我特别无知或粗鲁或诸如此类的话,我很抱歉。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-13 00:14:49

*thisLaserrh是激光,所以它称之为Laser::operator==

*this的内部是一个Laserrh是一个激光,所以它叫Laser::operator==

*this的内部是一个Laserrh是一个激光,所以它叫Laser::operator==

*this的内部是一个Laserrh是一个激光,所以它叫Laser::operator==

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

代码语言:javascript
运行
复制
return this==&rh

话虽如此,这是个糟糕的主意。身份不应成为C++中平等的基础。如果你解释一下真正的问题,我们可以想出一个更好的解决方案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35374376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档