簡體   English   中英

如何將對象/指針正確存儲到 Qlist 中

[英]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 表達式初始化指針變量

QListstd::dequestd::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM