Каково время жизни спокойных Объектов?
Такой как:
QTcpSocket *socket=new QTcpSocket();
Когда сокет будет уничтожен? Если я использую
delete socket;
Есть ли любое различие с:
QTcpSocket socket;
Я не мог найти глубокую информацию об этом, любой комментарий или ссылка одобрены.
Qt использует отношения родитель-потомок для управления памятью. Если вы предоставите объекту QTcpSocket
родительский объект при его создании, родитель позаботится об его очистке. Родителем может быть, например, окно графического интерфейса пользователя, использующее сокет. Как только окно умирает (то есть закрывается), сокет умирает.
Вы можете обойтись без родителя, но тогда вам действительно придется удалить
объект вручную.
Лично я рекомендую придерживаться идиоматического Qt и использовать связывание всех объектов в деревья родитель-потомок.
Объекты, выделенные с помощью new
, должны быть освобождены с помощью delete
.
Однако в Qt у большинства объектов может быть родитель, который вы указываете в качестве аргумента конструктору. Когда родительский объект удаляется, дочерние объекты удаляются автоматически.
Если вы по какой-то причине не хотите передавать родителя (потому что нет QObject, где имеет смысл владеть объектом сокета), вы также можете использовать QSharedPointer для управления временем жизни.