【问题标题】:How to safely delete a QT::QTcpSocket?如何安全地删除 QT::QTcpSocket?
【发布时间】:2015-03-02 22:13:12
【问题描述】:

QTcpSocket * QTcpServer::nextPendingConnection () [virtual]

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

在我的应用程序中,QTcpServer 存在很长时间(连接关闭时它会与主机断开连接,但除非程序退出,否则永远不会被销毁),它接受大量 QTcpServer::nextPendingConnection 并占用大量内存.

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

delete 在这种情况下可以吗?

【问题讨论】:

    标签: c++ qt sockets tcp


    【解决方案1】:

    这种情况下可以删除吗?

    是的,这要归功于 Qt 对象设计的聪明才智。

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

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

    因此删除 QTcpSocket 对象会自动从其父对象(在本例中为 QTcpServer)的子列表中删除 QTcpSocket,因此当 QTcpServer 对象被销毁时不会重复删除。

    【讨论】:

    • 这是一个非常聪明的设计。感谢分享。
    猜你喜欢
    • 2013-11-03
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    相关资源
    最近更新 更多