如何安全地删除 QT::QTcpSocket?
Posted
技术标签:
【中文标题】如何安全地删除 QT::QTcpSocket?【英文标题】:How to safely delete a QT::QTcpSocket? 【发布时间】:2015-03-02 22:13:12 【问题描述】:QTcpSocket * QTcpServer::nextPendingConnection () [virtual]
套接字是作为服务器的子级创建的,这意味着它是 在 QTcpServer 对象被销毁时自动删除。这是 完成后明确删除对象仍然是个好主意 用它,以避免浪费内存。
在我的应用程序中,QTcpServer
存在很长时间(连接关闭时它会与主机断开连接,但除非程序退出,否则永远不会被销毁),它接受大量 QTcpServer::nextPendingConnection
并占用大量内存.
如何在切换到下一个待处理的对象之前删除旧的 QTcpSocket 对象以节省内存,同时避免重复删除?
delete
在这种情况下可以吗?
【问题讨论】:
【参考方案1】:这种情况下可以删除吗?
是的,这要归功于 Qt 对象设计的聪明才智。
特别是,QTcpSocket(最终)从 Object 派生,QObject 析构函数方法最后包含以下代码:
if (d->parent) // remove it from parent object
d->setParent_helper(0);
因此删除 QTcpSocket 对象会自动从其父对象(在本例中为 QTcpServer)的子列表中删除 QTcpSocket,因此当 QTcpServer 对象被销毁时不会重复删除。
【讨论】:
这是一个非常聪明的设计。感谢分享。以上是关于如何安全地删除 QT::QTcpSocket?的主要内容,如果未能解决你的问题,请参考以下文章