2015-03-02 9 views
2

QTcpSocket * QTcpServer::nextPendingConnection() [virtual]Как безопасно удалить QT :: QTcpSocket?

Сокет создается как потомок сервера, что означает, что он автоматически удаляется , когда объект QTcpServer разрушается. Это по-прежнему рекомендуется удалить объект явно , когда вы закончите с ним, чтобы не тратить память.

В моем приложении, а QTcpServer жизни в течение длительного времени (оно отсоединяется от хоста, когда соединение закрывается, но никогда не разрушается, если выход из программы), и он принимает много QTcpServer::nextPendingConnection и занимает много памяти.

Как удалить старый объект QTcpSocket, прежде чем переключиться на следующий ожидающий, чтобы сохранить память, и в то же время избежать двойного удаления?

delete ok в этом случае?

ответ

3

Удалить в этом случае нормально?

Да, благодаря умению дизайна объекта Qt.

В частности, QTcpSocket вытекает (в конечном счете) от объекта, и метод QObject деструктор содержит этот код в конце:

if (d->parent)  // remove it from parent object 
    d->setParent_helper(0); 

Так удаление объекта QTcpSocket будет автоматически удалить QTcpSocket из детей-лист его родительский объект (в данном случае QTcpServer), поэтому при удалении объекта QTcpServer не будет двойного удаления.

Смежные вопросы