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

时间:2011-10-16 19:27:21

标签: c++

说我有一个监听器类。

我有A类和M类都实现了监听器类。 A级有4个M.

每个M都有1个A,但不是A,作为监听器基类。 (因此,M因为A对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 ++会为子类创建一个单独的对象来进行多重继承。在这种情况下没有多重继承,但我想确保它能够正常工作。

由于

1 个答案:

答案 0 :(得分:1)

它会按预期工作。

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