2012-12-02 47 views
0

是否可以使用QPointer和QHash?QPointer到QHash

QPointer<QHash<QString, QPointer<QStringList>> > pHash; 
+0

我應該說代碼編譯,但我得到奇怪的錯誤。 – user635818

回答

3

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的容器是implicitly shared,因此複製它們很便宜。

+0

+1用於發現'QPointer'只能與'QObject'一起使用。對於'QSharedPointer'替代品+1。而+1用於發現容器隱式共享:)。 –

+0

是的,這是當我嘗試使用pHash我得到的錯誤。非常感謝您的好回答和替代方案。 – user635818