是否可以将QPointer与QHash一起使用?
QPointer<QHash<QString, QPointer<QStringList>> > pHash;
QPointer 只能与 QObject 子类一起使用。因此,它不能与QHash或QStringList一起使用,因为两者都不是QObject的。如果上面的代码为您编译,那可能是因为您还没有使用 pHash?甚至初始化这样的 QPointer,例如
QPointer<QHash<QString, QString> > foo( new QHash<QString, QString>() );
给出如下错误 (GCC):
error: cannot convert ‘QHash<QString, QString>*’ to ‘QObject*’ in initialization
如果您确实需要指向容器的(智能)指针,请尝试 QSharedPointer,它不要求包含的对象属于任何特定类型。通常人们在堆栈上创建容器,但在几乎所有情况下,在堆上创建它们是不合时宜且不必要的。Qt的容器是隐式共享的,因此复制它们很便宜。