[英]How to properly store objects/pointers into a Qlist
我是 Qt 的新手,我遇到了這條線:
QList<Class*>* _lstChildren = new QList<Class*>();
其中該類是從另一個類派生的,並在其中具有各種構造函數。
我很好奇:為什么要使用額外的*
以及()
最后是什么意思?
與 Qt 無關,它是純 C++ 語法
QList<Class*>
- 類型QList<Class*>* _lstChildren
- 變量,指向上述類型的指針= new QList<Class*>()
- 通過 new 表達式初始化指針變量 QList
是std::deque
、 std::list
Qt 模擬(不是兩者的直接等價物), Class*
是作為模板參數傳遞的類型。
()
這里是 new 表達式的一部分,用指向創建的QList<Class*>
類型的對象的值初始化指針。
在這種情況下,它正在調用默認構造函數 - 括號內沒有提供參數。 如果QList
根本沒有構造函數,則意味着創建對象的值初始化(由零)。
您的列表包含原始指針,因此您必須為其提供指向Class*
指針,例如在動態內存中創建對象。
QList<Class*>* lstChildren = new QList<Class*>();
Class* child1= new Class();
lstChildren->append(child1);
它發生這樣QList
不應該刪除這些指針指向的對象,它只會破壞指針本身。 要清理,您必須使用
qDeleteAll(*lstChildren);
lstChildren->clear();
或單獨刪除它們(並從列表中刪除)。
沒有“額外的” *
。
QList<Class*>* _lstChildren = new QList<Class*>();
_lstChildren
是一個指針*
到QList
,它由指針*
到Class
並且()
在new QList<Class*>()
的末尾是因為QList<Class*>
對象是由value initalization初始化的。
1- 如果您添加了額外的 '*',則 _lstChildren 將是一個指向 QList 的指針,該 QList 包含一些類 'class' 的指針。 您可以刪除它,然后將 _lstChildren 用作普通變量。
2- 結尾 '()' 是必需的。 為什么? 因為 QList() 是 QList 的構造函數。 您在創建您自己的類的變量時已經看到了它。
3- 正如 Qt 公司所建議的,最好使用QScopedPointer而不是原始指針。 這保證了當當前作用域消失時指向的對象將被刪除並且您不需要手動管理您的對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.