Question

J'ai actuellement une classe de formulaire QT appelée `FOO 'dérivé de QmainWindow.

maintenant dans une autre classe, j'ai quelque chose comme ça

class someclass
{
   private:
      foo* form;
   ......
   public:
      someclass()
      {
          form = NULL; 
      }    
};

Maintenant, il existe une méthode de somclasse qui doit savoir si FOO * est valide si elle pointe à une forme foo valide.Je voulais savoir quelle était la meilleure façon de la réaliser.Dois-je aller avec

if(form!=NULL) {...}

Le problème est que la méthode ci-dessus ne guree pas une forme valide fiable.Toute suggestion?

Était-ce utile?

La solution

Je pense que vous recherchez des pointeurs intelligents. Habituellement, cette vérification est effectuée par un pointeur faible. Cela ne tiendrait pas la propriété de l'objet, mais cela pourrait vérifier la validité avec le Méthode isnull () .

QT a une classe pratique établie pour cela, appelée qweakPoinger . Il est généralement utilisé en paire avec des pointeurs partagés, qui serait QsharedOpoinger dans le monde Qt.

La classe QWeakPointer détient une faible référence à un pointeur partagé

Le QWeakpointer est une référence automatique faible à un pointeur en C ++. Il ne peut pas être utilisé directement à la désarférence, mais il peut être utilisé pour vérifier si le pointeur a été supprimé ou non dans un autre contexte.

Les objets QWeakPointer ne peuvent être créés que par attribution d'un Qsharededpointer.

Voici la méthode que vous pourriez réellement utiliser pour voir si le principal Qsharedpointer possédant l'objet a supprimé le pointeur référencé.

bool qweakpointer :: isnull () const

retourne true si cet objet tient une référence à un pointeur NULL.

Notez que, en raison de la nature des références faibles, le pointeur que les références QweakPoinger peuvent devenir nuls à un moment donné, la valeur renvoyée de cette fonction peut donc passer de FALSE à VRAI à partir d'un appel à la suivante.

De cette façon, l'autre classe n'aurait pas besoin d'obtenir une référence au pointeur avec la propriété, mais en fonction de votre cas d'utilisation exacte, vous pouvez simplement choisir QsharedOpoinger partout.

Autres conseils

Utilisez QScopedPoinger ou qsharedOppoinger en fonction de la portée de la classe FOO au lieu de FOO *.Cela permettrait de vérifier de manière fiable si le pointeur est valide, la comparaison du pointeur à NULL n'aidera pas à détecter le pointeur supprimé pointant dans la nature.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top