所有继承自QObject的类,如果设置了parent(在构造时,或用setParent函数,或parent的addChild相关信息),那在parent被delete时,这个parent的相关所有child都会自动delete,不用用户手动处理。
在正确的QT开发中,顶级的patent一般是在main函数中,而patent生命周期一般都会比child长,所以正常都不会出错,只要我们编码注意不要写出如下代码:
{
QObject*parent=newQObject(0);
QObject*child=newQObject(parent);
deleteparent;
child->...
}Qt不建议在一个parent的范围之外持有对childs的指针,按它说的当然不会出野指针的问题了。但是非要在parent外持有child的指针,那么Qt推荐使用QPointer,QPointer相当于一个智能指针,不用智能指针前的代码如下:
如果用了QPointer的代码如下
{
QObject*parent=newQObject(0);
QObject*child=newQObject(parent);
QPointer<QObject>p=child;
deleteparent;
if(p.isNull()){
p->...
}}在使用之前判断是否为空,这时就不会再出错段错误了。
No comments:
Post a Comment