Labels

Friday, August 5, 2011

QT Memory Management

转载:红尘弥漫  http://snailsblog.appspot.com/?p=206001
所有继承自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