Qt对象的生命周期

时间:2010-07-16 11:38:40

标签: c++ qt object object-lifetime

Qt对象的生命周期是什么时候?

如:

QTcpSocket *socket=new QTcpSocket();

什么时候套接字会被破坏?我应该使用

delete socket;

与以下内容有什么不同:

QTcpSocket socket;

我无法找到关于此的深刻信息,欢迎任何评论或链接。

3 个答案:

答案 0 :(得分:11)

Qt使用父子关系来管理内存。如果在创建父项时向父项提供QTcpSocket对象,则父项将负责清理它。例如,父可以是使用套接字的GUI窗口。一旦窗口死亡(即关闭),插座就会死亡。

您可以在没有父母的情况下进行,但实际上您必须手动delete该对象。

我个人建议坚持使用惯用的Qt并将所有对象链接到父子树。

答案 1 :(得分:9)

使用new分配的对象必须与delete一起发布。

但是,对于Qt,大多数对象都可以有一个父对象,您可以将其指定为构造函数的参数。删除父项后,将自动删除子对象。

答案 2 :(得分:2)

如果由于某种原因不想传递父节点(因为没有QObject可以拥有套接字对象),您也可以使用QSharedPointer来管理生命周期。