12
votes

Durée de vie des objets QT

Quelles sont les vies d'objets QT?

tels que: xxx

lorsque le socket sera détruit? Dois-je utiliser xxx

y a-t-il une différence avec: xxx

Je n'ai pas pu trouver une infromation profonde à ce sujet, tout Le commentaire ou le lien est la bienvenue.


0 commentaires

3 Réponses :


11
votes

Objets alloués avec Nouveau doivent être publiés avec Supprimer .

Cependant, avec qt, la plupart des objets peuvent avoir un parent, que vous spécifiez comme un argument au constructeur. Lorsque le parent est supprimé, les objets enfants sont supprimés automatiquement.


2 commentaires

Lorsque vous essayez de supprimer, j'obtiens une erreur d'exécution (à propos de l'essai pour accéder au membre privé à Qhostadddress)


L'accès aux membres privés n'est pas coché au moment de l'exécution, uniquement pendant la compilation. Peut-être que c'est un crash? Ensuite, votre objet est probablement supprimé deux fois.



13
votes

QT utilise des relations parent-enfant pour gérer la mémoire. Si vous fournissez l'objet qtcpsocket avec un parent lorsque vous le créez, le parent s'occupera de le nettoyer. Le parent peut être, par exemple, la fenêtre d'interface graphique qui utilise la prise. Une fois la fenêtre meurt (c'est fermé) la prise meurt.

Vous pouvez faire sans le parent, mais vous devez alors Supprimer l'objet manuellement.

Personnellement, je vous recommande de coller à Idiomatic QT et d'utiliser la liaison de tous les objets dans les arbres parent-enfant.


0 commentaires

3
votes

Si vous ne voulez pas passer un parent pour une raison quelconque (car il n'y a pas de QObject où il est logique de posséder l'objet Socket), vous pouvez également utiliser un QsharedPoinger pour gérer la durée de vie.


0 commentaires