2015-03-02 325 views
2

QTcpSocket * QTcpServer::nextPendingConnection() [virtual]如何安全地删除QT :: QTcpSocket?

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

在我的应用程序,一个QTcpServer生活很长一段时间(从主机断开连接时关闭,但从来没有销毁,除非退出程序),它接受了很多QTcpServer::nextPendingConnection并采取了很多的内存。

在切换到下一个挂起的存储器之前,应该如何删除旧的QTcpSocket对象,同时避免双重删除?

delete ok在这种情况下?

回答

3

删除ok在这种情况下?

是的,这要归功于Qt的对象设计的巧妙。

特别是与QTcpSocket导出(最终)的对象,QObject的析构函数方法在结尾处包含此代码:

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

所以删除与QTcpSocket对象会被自动从孩子列表中删除与QTcpSocket它的父对象(在这种情况下是QTcpServer),所以当QTcpServer对象被销毁时不会出现双重删除。