QList::contains 使用 QSharedPointer

QList::contains with a QSharedPointer

所以我有一个 class,它有一个 id 数据成员,我在 QList<QSharedPointer<MyClass>> 中使用它,我不确定如何检查是否有一个现有的那个 QList 中的 ID。我将如何去做,因为 QList::contains 需要 QSharedPointer<MyClass>& 而不是 MyClass*

我应该只使用一个使用 id 作为键的 QHash 吗?

QList::contains算法基于== operator。如 Qt 文档中所述,如果两个托管原始指针的值具有相同的值,则 == operator of QSharedPointer returns true

此外,如果您在 QList 中使用了原始指针,它将无法工作,因为您无法覆盖原始指针的 == operator(您有指向 MyObject 的指针不列出对象,因此不会调用 MyObject 的重载 ==

唯一的解决方案是手动迭代列表并使用 for 循环检查是否相等。