Время жизни спокойных объектов

Каково время жизни спокойных Объектов?

Такой как:

QTcpSocket *socket=new QTcpSocket();

Когда сокет будет уничтожен? Если я использую

delete socket;

Есть ли любое различие с:

QTcpSocket socket;

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

10
задан metdos 16 July 2010 в 11:38
поделиться

3 ответа

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

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

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

12
ответ дан 3 December 2019 в 16:51
поделиться

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

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

10
ответ дан 3 December 2019 в 16:51
поделиться

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

2
ответ дан 3 December 2019 в 16:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: