2011-04-19 115 views

回答

4

QList存儲對象的副本,所以它應該工作。但是確保複製的確是你想要的。如果不是這種情況,請用new分配對象並將指針存儲在QList中。

-2

nope。 QList存儲指向對象的指針列表,所以局部變量不應該存儲在全局QList中。

退房此鏈接的詳細信息:

http://twl.pl/jtz/Inne/QT-Tutorial/qlist.html#details

+1

這是非常過時的。 QList與今天的QList完全不同。這是Qt4中的當前QList:http://doc.qt.nokia.com/latest/qlist.html。 QList 存儲A對象的副本,A對象的QList 指針。在這種情況下,推薦並安全地存儲可能的副本。 – 2011-04-19 08:16:32

0

QList只有一個指向它的內容的指針。因此,無論您何時製作QList副本,都不會複製所有內容,只會複製指針。無論何時修改列表,都會進行復制以確保它不會修改其他對象的內容。看到這個:http://doc.qt.nokia.com/4.7-snapshot/qshareddatapointer.html

QList確實使用了複製構造函數,所以如果你的對象包含大量數據,那麼在QList中使用直接對象可能並不好,因爲當列表需要增長時複製會導致一些開銷。

另一種解決方案是使用QSharedDataPointer創建類似於QList的功能。

請注意,大多數Qt類已經使用這個,所以如果你的類包含這裏列出的東西:http://doc.qt.nokia.com/4.7-snapshot/implicit-sharing.html有點不必要使用QSharedDataPointer。

我認爲,有一件事你沒有明確表達,具有相關性。您是否希望全局靜態對象A具有與列表中的對象相同的數據?

這可以通過使用指針或QExplicitlySharedDataPointer來實現。

QExplicitlySharedDataPointer與QSharedDataPointer非常相似,只有一個例外。 它在修改時不會複製數據。這裏有一些文檔http://doc.qt.nokia.com/4.7-snapshot/qexplicitlyshareddatapointer.html

我使用這些類很多,我發現它們非常有用,並不難用。