微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

具有相同地址的指针相等测试产生错误

如何解决具有相同地址的指针相等测试产生错误

为什么这个指针比较不起作用?

// in handleSlot()...
void* ptr1 = m_expected; // defined as SimpleBase*
void* ptr2 = sender(); // defined as QObject*
if (ptr1 != ptr2)
    return; // this should not be reached,since the debugger shows ptr1 and ptr2 are the same

这里的背景是我有一个模板类型,它继承自 QObjectT,其中 TSimpleBase 的子类。由于不知道是哪个模板实例化触发了slot,所以这里不能做动态转换直接比较同类型的指针。

我还尝试使用 reinterpret_cast<uintptr_t> 比较指针地址,但是当我这样做很奇怪时,它们产生了不同的整数。

我能够通过向信号和槽添加一个参数来解决这个问题,以便它通过 const SimpleBase *,即 this,并且指针比较以这种方式工作。但我很好奇是否有一种方法可以比较这些指针,使用 sender() 而不是传递额外的参数?

解决方法

似乎您可以 dynamic_cast<SimpleType*>(sender())dynamic_cast<QObject*>(m_expected) 假设两者都是唯一的并且具有 virtual 函数。多继承基确实具有不同的实际地址,您无法始终使用 void* 来比较它们的相等性。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。