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

标签 c++ operator-overloading memory-address

在我的程序中,只要单击鼠标,我就会将 Laser 类的一个实例添加到 vector 中。稍后,在更新激光运动时,我会检查它是否已经移动了一定距离,如果已经移动,我想将其从 vector 中移除。因此,我首先将激光位置与 this.getPosition() 的位置进行比较,然后遍历 vector ,但它从未奏效。所以我尝试使用运算符重载,这样我就可以 == vector 中的激光和“这个”激光。我只想知道 vector 中的激光是否与“这个”激光相同。但它永远行不通。这是我的代码。

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);
}

所以真的,我想做的就是比较它们的内存地址,看看它们是否是相同的激光实例,这样我就可以从 vector 中删除它。提前感谢您的帮助,如果我特别无知或粗鲁或类似的事情,我深表歉意。

最佳答案

*this是一个Laserrh是一个激光,所以它调用Laser::operator==.
*this 里面是一个 Laserrh 是一个激光,所以它调用 Laser::operator==.
*this 里面是一个 Laserrh 是一个激光,所以它调用 Laser::operator==.
*this 里面是一个 Laserrh 是一个激光,所以它调用 Laser::operator==.

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

return this==&rh

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

关于c++ - 比较c++中对象实例的内存地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35374376/

相关文章:

c++ - 循环遍历类模板中的元组,插入 vector 元素

c++ - .txt 文件显示中文符号/c++

c++ - 如何使用程序集获取返回 float 的 __stdcall 函数的结果

c++ - 使用 Arduino 编写一个简单的按钮 LED 电路

c++ - 为什么运算符有时是独立的,有时是类方法?

c++ - 如何正确返回带有成员变量的重载运算符++?

c++ - 如何在两个不同类之间重载 '==' 运算符?

C++ 双地址运算符? (&&)

assembly - 8位和16位处理器如何通过两个寄存器访问更多RAM?

C++ - 获取特定内存地址的值