Sont des signaux Qt automatiquement déconnecté lorsque l'un de la classe est supprimée
N'Qt supprimer automatiquement les connexions entre les objets , lorsque l'un des côté est supprimé ?
e.g connect (A .. , B ..)
, lorsqu'Un (un pointeur) est supprimé , ou que B est supprimé , la connexion sera déconnecté ?
Est-il nécessaire d'utiliser déconnectez explicitement dans le destructeur ?
Vous devez vous connecter pour publier un commentaire.
Oui, le
QObject::~QObject
destructeur qui s'en occupe:Prenez soin de bien:
deleteLater()
si cette situation peut se produire.deleteLater
certainement préférable et nécessaire si vous êtes à la suppression d'un objet appartenant à un autre thread (indiqué dans les docs).deleteLater()
et avant, il est exécuté, si aucun nouveau signal est mis en file d'attente à partir d'un autre thread, qui conduit à un comportement indéterminé. Selon le système d'exploitation, il se bloque parfois à des endroits aléatoires. Difficile de suivre les bugs. 🙁unique_ptr
personnalisé deleter commedeleteLater
, il est donc assuré que la suppression de l'objet est effectuée correctement. Il n'y a pas d'erreur avec valgrind soit (à savoir le double de libre). Qt dit que les signaux en attente avant dedeleteLater()
divertir. Mais imaginons un cas où le signal est émis sur un objet, aprèsdeleteLater()
est marqué. Dans de tels cas, ladeleteLater()
se invoquée en premier, suivi par le signal. Il en résulte UB. De toute façon, je suis actuellement débogage d'une question, d'où la lib Qt est à l'origine de certains problèmes de mémoire de manière cohérente. Il y a quelques bugs dans Qt.