【发布时间】:2015-10-23 00:25:13
【问题描述】:
我正在使用 Qt 编写基于 tcp 的服务器。
我计划这个服务器是多线程的,
所以我的 tcpserver 类继承自 QTcpServer 并覆盖 incomingConnection()。一切都很好,除了删除用户。
TcpServer 类管理
QSharedPointer<Client> 的列表。当我从列表中删除所述客户端时,由于智能指针,它会自动删除。
我的客户类拥有一个QSharedPointer<QTcpSocket>,这意味着客户的
QTcpSocket 在客户端被删除时被删除。
问题是,Qt 似乎在删除后尝试使用此套接字,导致分段错误。
我是否应该只管理套接字列表,并在不再需要它们时调用deleteLater()?
还是应该将客户端类中的套接字指针切换为普通指针?
void SlotSocketError(void)
{
QTcpSocket sock = qobject_cast<QTcpSocket *>(QObject::sender());
QSharedPointer<Client> client = GetClientFromSocket(sock);
_clientList.removeAt(GetClientPositionInList(client));
}
QList<QSharedPointer<Client> > _clientsList; // From TcpServer header.
/* Client's class header */
QSharedPointer<QTcpSocket> _socket;
【问题讨论】:
-
你能显示一些代码吗?这比解释更有价值
标签: c++ qt tcp qsharedpointer