如何安全地删除 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?的主要内容,如果未能解决你的问题,请参考以下文章

C++ Qt - QTcpSocket - 找不到文件

Qt QTcpSocket 流式传输

Qt QTcpSocket 异步写入

如何安全地删除 indexPath 处的行

Docker 那些事儿如何安全地停止删除容器

Qt之QTemporaryFile(文件名唯一,且可以自动删除)