Qt QPointer到QHash

Qt QPointer到QHash,qt,pointers,qhash,qpointer,Qt,Pointers,Qhash,Qpointer,可以将QPointer与QHash一起使用吗 QPointer<QHash<QString, QPointer<QStringList>> > pHash; QPointer相位; QPointer只能与QObject子类一起使用。因此,它不能与QHash或QStringList一起使用,因为两者都不是QObject的。如果上面的代码为您编译,那可能是因为您还没有使用pHash?甚至初始化这样的QPointer,例如 QPointer<QHash&l

可以将QPointer与QHash一起使用吗

QPointer<QHash<QString, QPointer<QStringList>> >  pHash;
QPointer相位;

QPointer只能与QObject子类一起使用。因此,它不能与QHash或QStringList一起使用,因为两者都不是QObject的。如果上面的代码为您编译,那可能是因为您还没有使用pHash?甚至初始化这样的QPointer,例如

QPointer<QHash<QString, QString> > foo( new QHash<QString, QString>() );
QPointer foo(新的QHash());
给出如下错误(gcc):

错误:无法在初始化时将'QHash*'转换为'QObject*'
如果您确实需要指向容器的(智能)指针,请尝试,这不要求包含的对象为任何特定类型。
但是,通常在堆栈上创建容器,在堆上创建容器是不规则的,几乎在所有情况下都是不必要的。Qt的容器很简单,因此复制它们很便宜。

QPointer只能与QObject子类一起使用。因此,它不能与QHash或QStringList一起使用,因为两者都不是QObject的。如果上面的代码为您编译,那可能是因为您还没有使用pHash?甚至初始化这样的QPointer,例如

QPointer<QHash<QString, QString> > foo( new QHash<QString, QString>() );
QPointer foo(新的QHash());
给出如下错误(gcc):

错误:无法在初始化时将'QHash*'转换为'QObject*'
如果您确实需要指向容器的(智能)指针,请尝试,这不要求包含的对象为任何特定类型。
但是,通常在堆栈上创建容器,在堆上创建容器是不规则的,几乎在所有情况下都是不必要的。Qt的容器是可编译的,因此复制它们很便宜。

我应该说代码是可编译的,但会出现奇怪的错误。我应该说代码是可编译的,但会出现奇怪的错误。+1用于发现
QPointer
只能与
QObject
一起使用+1表示
QSharedPointer
备选方案。和+1来发现容器是隐式共享的:)。是的,当我尝试使用pHash时,我得到了错误。非常感谢您的回答和备选方案。+1指出
QPointer
只能与
QObject
一起使用+1表示
QSharedPointer
备选方案。和+1来发现容器是隐式共享的:)。是的,当我尝试使用pHash时,我得到了错误。非常感谢你的回答和选择。