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.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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