如何将对象/指针正确存储到Qlist中

jmo*_*rty -2 c++ qt pointers object qlist

我是Qt的新手,我遇到过这一行:

    QList<Class*>* _lstChildren = new QList<Class*>(); 
Run Code Online (Sandbox Code Playgroud)

其中类派生自另一个类,并且其中包含各种构造函数.

我很好奇:为什么额外*使用的,什么是()在最后的手段?

Swi*_*Pie 6

与Qt无关,它是纯粹的C++语法

  • QList<Class*> - 类型
  • QList<Class*>* _lstChildren - 变量,指向上述类型的指针
  • = new QList<Class*>() - 通过new-expression初始化指针变量

QList是Qt的模拟std::deque,std::list(不是直接等价于),Class*是作为模板参数传递的类型.

()这是新表达式的一部分,用于初始化带有指向创建的对象QList<Class*>类型的值的指针.

在这种情况下,它调用默认构造函数 - 括号内没有提供参数.如果QList根本没有构造函数,则意味着创建对象的值初始化(通过零).

您的列表包含原始指针,因此您必须指定它Class*,例如在动态内存中创建对象.

QList<Class*>* lstChildren = new QList<Class*>(); 

Class* child1= new Class();
lstChildren->append(child1);
Run Code Online (Sandbox Code Playgroud)

它发生所以QList不应该删除那些指针指向的对象,它只会破坏指针本身.要清理,你必须使用

qDeleteAll(*lstChildren);
lstChildren->clear();
Run Code Online (Sandbox Code Playgroud)

或单独删除它们(并从列表中删除).