在这种情况下,指针是否会与预期不同?

Will the pointer ever be different than expected in this case?

本文关键字:这种情况下 指针 是否      更新时间:2023-10-16

假设我有一个Listener类。

我有类A和类M,它们都实现侦听器类。A班有4个M。

每个M都有一个A,但不是作为A,作为侦听器基类。(所以把A降序,因为M对A一无所知)

当A从其中一个M处收到消息时,它需要知道是哪个M发送的。

因此,Listener类中的每个方法都有一个Listener*形参。

所以如果我有这样的东西:

void A::someListenerMethod(Listener* l, MsgEnum msg)
{
    if(l == m_mInstance[0])
    {
       //will this work if the caller was indeed the M instance in question?
    }
}

所以本质上我要问的是,在比较它们之前,我是否需要将M向下转换为侦听器?

我读到有时c++会为一个子类做一个单独的对象来进行多重继承。在这种情况下没有多重继承,但我想确保这将工作。

谢谢

会如你所愿。

实际上,为了进行比较,m_mInstance[0]将隐式地转换为Listener*,以便类型匹配。if (l == (Listener*)(m_mInstance[0])) ...将编译成相同的目标代码。这通常不会产生开销,除非您有多重继承,在这种情况下,它可能会产生最小的开销。