Время жизни объектов Qt

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

, например:

QTcpSocket *socket=new QTcpSocket();

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

delete socket;

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

QTcpSocket socket;

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

3 ответов


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

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

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


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

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


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