12

Qt 对象的生命周期是多少?

如:

QTcpSocket *socket=new QTcpSocket();

socket什么时候会被销毁?我应该使用

delete socket;

有什么区别:

QTcpSocket socket;

我找不到有关此的深入信息,欢迎任何评论或链接。

4

3 回答 3

13

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

您可以不使用父对象,但实际上您必须delete手动处理对象。

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

于 2010-07-16T11:41:31.917 回答
11

分配的对象new必须用 释放delete

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

于 2010-07-16T11:41:19.177 回答
3

如果您出于某种原因不想传递父级(因为没有 QObject 拥有套接字对象是有意义的),您还可以使用 QSharedPointer 来管理生命周期。

于 2010-07-16T12:15:16.087 回答