如何安全删除QT :: QTcpSocket?

时间:2015-03-02 22:13:13

标签: c++ qt sockets tcp

QTcpSocket * QTcpServer::nextPendingConnection () [virtual]

  

套接字创建为服务器的子级,这意味着它是   当QTcpServer对象被销毁时自动删除 。它是   完成时,明确删除对象仍然是一个好主意   用它,以避免浪费记忆。

在我的应用程序中,QTcpServer存在了很长时间(当连接关闭时它与主机断开连接,但除非程序退出,它永远不会被销毁),并且它接受了大量的QTcpServer::nextPendingConnection并且需要很多记忆。

如何在切换到下一个待处理对象之前删除旧的QTcpSocket对象以节省内存,同时避免双重删除?

在这种情况下delete是否正常?

1 个答案:

答案 0 :(得分:3)

  

在这种情况下删除是否正常?

是的,多亏了Qt的对象设计的聪明才智。

特别是,QTcpSocket从(最终)派生自Object,而QObject析构函数方法最后包含此代码:

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

因此,删除QTcpSocket对象将自动从其父对象的子列表中删除QTcpSocket(在本例中为QTcpServer),因此在销毁QTcpServer对象时不会出现双删除。