Qt对象的生命周期是什么时候?
如:
QTcpSocket *socket=new QTcpSocket();
什么时候套接字会被破坏?我应该使用
delete socket;
与以下内容有什么不同:
QTcpSocket socket;
我无法找到关于此的深刻信息,欢迎任何评论或链接。
答案 0 :(得分:11)
Qt使用父子关系来管理内存。如果在创建父项时向父项提供QTcpSocket
对象,则父项将负责清理它。例如,父可以是使用套接字的GUI窗口。一旦窗口死亡(即关闭),插座就会死亡。
您可以在没有父母的情况下进行,但实际上您必须手动delete
该对象。
我个人建议坚持使用惯用的Qt并将所有对象链接到父子树。
答案 1 :(得分:9)
使用new
分配的对象必须与delete
一起发布。
但是,对于Qt,大多数对象都可以有一个父对象,您可以将其指定为构造函数的参数。删除父项后,将自动删除子对象。
答案 2 :(得分:2)
如果由于某种原因不想传递父节点(因为没有QObject可以拥有套接字对象),您也可以使用QSharedPointer来管理生命周期。