Bonjour à tous,
Je me permet de venir vers vous car j'ai un problème lors de l'appel de la fonction delete sur un objet stocké dans une QList.
1 2 3 4 5 6 7 8 9 10 11
| void TcpServer::OnSocketStateChanged(TcpSocket *socket, int state)
{
switch (state)
{
case TcpSocket::UnconnectedState:
qDebug() << "Deconnexion du socket" << socket->socketDescriptor();
socketList.removeOne(socket);
delete socket; // aie !!!
break;
}
} |
Voici le header de tcpsocket si besoin.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| #ifndef TCPSOCKET_H
#define TCPSOCKET_H
#include <QtNetwork/QTcpSocket>
class TcpSocket
: public QTcpSocket
{
Q_OBJECT
public:
TcpSocket() = delete;
TcpSocket(const TcpSocket &) = delete; // desactive le constructeur de copie
TcpSocket& operator=(const TcpSocket &) = delete; // desactive l'opérateur d'affectation
TcpSocket(qintptr handle, QObject* parent = nullptr);
~TcpSocket();
signals:
void SigReadyRead(TcpSocket* socket);
void SigStateChanged(TcpSocket* socket, int state);
};
#endif // TCPSOCKET_H |
La liste d'objet de type pointeur TcpSocket
QList<TcpSocket*> socketList;
Lors du delete, l'application plante, je tiens à préciser que TcpSocket est une classe qui hérite de QTcpSocket et TcpServer hérite de QTcpServer.
D'après ce que j'ai pu comprendre dans la doc QList::removeOne ne fait pas appel au deleteur de l'objet, si j'affiche l'adresse du pointeur 'socket' il semble toujours actif.
Si l'un d'entre vous a une idée je suis preneur !
Bonne fin de journée à tous.
Anthony
Partager