web-dev-qa-db-fra.com

Les signaux dans Qt sont-ils automatiquement déconnectés lorsque l'une des classes est supprimée

Qt supprime-t-il automatiquement les connexions entre les objets, lorsque l'un des côtés est supprimé?

par exemple connect (A .. , B ..), lorsque A (un pointeur) est supprimé, ou B est supprimé, la connexion sera-t-elle déconnectée?

Est-il nécessaire d'utiliser explicitement la déconnexion dans le destructeur?

45
daisy

Oui, le destructeur QObject::~QObject s'en charge:

Tous les signaux à destination et en provenance de l'objet sont automatiquement déconnectés et tous les événements publiés en attente pour l'objet sont supprimés de la file d'attente des événements.
Cependant, il est souvent plus sûr d'utiliser deleteLater() plutôt que de supprimer directement une sous-classe QObject.

Attention cependant:

Avertissement: La suppression d'un QObject pendant que des événements en attente attendent d'être livrés peut provoquer un plantage. Vous ne devez pas supprimer directement le QObject s'il existe dans un thread différent de celui en cours d'exécution. Utilisez plutôt deleteLater (), ce qui entraînera la boucle d'événements pour supprimer l'objet une fois que tous les événements en attente lui auront été remis.

43
Mat