Время жизни объектов Qt - PullRequest
10 голосов
/ 16 июля 2010

Каковы времена жизни объектов Qt?

Например:

QTcpSocket *socket=new QTcpSocket();

Когда сокет будет разрушен? Должен ли я использовать

delete socket;

Есть ли разница с:

QTcpSocket socket;

Я не смог найти глубокую информацию по этому поводу, приветствуются любые комментарии или ссылки.

Ответы [ 3 ]

12 голосов
/ 16 июля 2010

Qt использует отношения родитель-потомок для управления памятью.Если вы предоставите объект QTcpSocket с родителем при его создании, родитель позаботится о его очистке.Родителем может быть, например, окно GUI, использующее сокет.Как только окно умирает (т.е. закрывается), сокет умирает.

Вы можете обойтись без родителя, но тогда вам действительно придется delete объект вручную.

Лично я рекомендую придерживаться идиоматического Qt и использовать связывание всех объектов в родительско-дочерние деревья.

10 голосов
/ 16 июля 2010

Объекты, выделенные с new, должны быть освобождены с delete.

Однако в Qt у большинства объектов может быть родитель, который вы указываете в качестве аргумента для конструктора.При удалении родителя дочерние объекты автоматически удаляются.

2 голосов
/ 16 июля 2010

Если вы не хотите передавать родительский объект по какой-либо причине (поскольку не существует QObject, в котором имеет смысл владеть объектом сокета), вы также можете использовать QSharedPointer для управления временем жизни.

...