比较地址足够这个`operator ==`?

Pau*_*nta 5 c++ operators

我正在为我的事件系统创建一个自定义RTTI系统.以下是EventTypeInfo课程.如您所见,它是不可复制的,就像std::type_info.

class EventTypeInfo
{
  public:
    EventTypeInfo(const EventTypeInfo&) = delete;
    EventTypeInfo& operator=(const EventTypeInfo&) = delete;

    inline bool operator==(const EventTypeInfo& other) const {
        return this == &other;
    }
};
Run Code Online (Sandbox Code Playgroud)

我为每个事件类创建这些对象的方式归结为:

template<class EventClass>
const EventTypeInfo& event::type::info()
{
    static EventTypeInfo typeinfo;
    return typeinfo;
}
Run Code Online (Sandbox Code Playgroud)

鉴于(1)这些对象是静态创建的(这意味着它们将在应用程序的整个持续时间内持续),(2)它们是不可复制的,并且(3)没有办法在EventTypeInfo不诉诸的情况下修改字段const_cast,是它足以让我实现operator==是条款this == &other,还是我错过了什么?

Ale*_*nov 2

对于多模块应用程序,我认为每个模块最终可能会拥有自己的静态类型信息对象的副本。因此,如果您的事件可以在模块之间飞行,那么仅仅比较地址可能是不够的。

据我所知,GCC中的RTTI系统过去曾出现过此类问题,并造成了麻烦。最终, GCC 开发人员承认了这一点,并修复在 GCC 4.5 中使用字符串比较。

所以我建议你先进行指针比较,如果失败,再检查更可靠的机制。