我是Qt的新手,我遇到了这一行:
QList<Class*>* _lstChildren = new QList<Class*>();
其中类派生自另一个类,并且其中包含各种构造函数。
我很好奇:为什么要使用额外的*
以及最后的()
是什么意思?
答案 0 :(得分: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);
它发生了QList
不应该删除那些指针所指向的对象,它只会破坏指针本身。要清理,你必须使用
qDeleteAll(*lstChildren);
lstChildren->clear();
或单独删除它们(并从列表中删除)。
答案 1 :(得分:0)
没有&#34;额外&#34; *
。
QList<Class*>* _lstChildren = new QList<Class*>();
_lstChildren
是指向*
的指针QList
,其中包含指针*
到Class
而()
位于new QList<Class*>()
的末尾,因为QList<Class*>
对象由value initalization初始化。
答案 2 :(得分:0)
1-如果添加多余的'*',则_lstChildren将是指向QList的指针,该列表包含一些类'class'的指针。您可以删除它,然后将_lstChildren用作普通变量。
2-必需以'()'结尾。为什么?因为QList()是QList的构造函数。创建自己的类的变量时,您已经看到了它。
3-如Qt公司建议,最好使用QScopedPointer代替原始指针。这样可以保证当当前作用域消失时,指向的对象将被删除,并且您无需手动管理对象。