Question : Opérateur de tâche parfait 1

Bonjour, le

How devrait je faire l'opérateur de tâche parfait pour cette classe ?

class TAAA : TSuperAAA
{
TBBB* b1_ ;
   TBBB* b2_;
} ; le
TBBB est monomorphic et b1_, le point something.
de b2_ class= de

Réponse : Opérateur de tâche parfait 1

>> particulièrement quand Infinity08 : a écrit que la garantie n'est pas nécessaire dans le vrai système (si je comprenais).

Pas, je n'ai pas voulu dire qu'une garantie n'est pas nécessaire. Ce que j'ai dit en réponse au poteau de l'ambiance était que je préfère traiter des conditions d'erreur différemment que son approche.

Il y a deux approches ici (j'ai ajouté mes propres pensées personnelles trop) :

(a) Essayer d'écrire l'opérateur de tâche pour laisser l'objet dans un état valide pour chaque scénario possible. C'est fondamentalement impossible, ou extrêmement dur pour le moins. Il y a trop de variables impliquées, et trop de scénario possible d'erreur. Additionaly, ce genre d'approche ajoute des restrictions à ce que le code peut faire, qui n'est pas souhaitable dans beaucoup de cas.

(b) Éviter la complexité supplémentaire qui vient avec l'approche précédente, et reporter à la place la responsabilité au code appelant. Le mécanisme des exceptions approprié parfaitement à celui. En outre, c'est habituellement le code appelant qui sait le meilleur comment traiter une erreur (l'une ou l'autre par l'essai de le fixer, d'ignorer lui, d'échouer avec élégance, etc.), de sorte que soit une autre raison de préférer cette approche.

Est la deuxième approche ce que je recommande pour le cas général, parce qu'il est plus flexible, et plus facile à mettre en application, et une fois fait correctement, vous ne perdez rien quant à la sûreté de code.
La première approche est utile dans certains cas spécifiques, mais vous obtiendrez rapidement enterré dans les complexités si vous essayez de l'employer partout heh.



>> Mon inspiration pour faire ce poteau est

C'est un article gentil, et il couvre en effet plusieurs des pièges d'opérateurs de tâche.


>> I et se demandait ce qui est réponse correcte pour cela.

Vous noterez que l'article commence par une des manières correctes d'approcher un opérateur de tâche. La seule différence avec le code que j'ai signalé plus tôt, est que leur opérateur de tâche nettoie correctement après elle-même au cas où l'attribution de mémoire échouerait.

C'est bon, mais pas entièrement nécessaire. Le destructeur des classes est conçu pour nettoyer un objet, ainsi je préfère laisser cette responsabilité là, au lieu de l'étendre all over les méthodes des classes.

Vers la fin de l'article, différentes approches sont discutées aussi.


Allant au-dessus de mon code plus tôt encore, j'ai repéré une erreur cependant. La « suppression b1_ ; la » ligne devrait avoir été suivie d'« b1_ = 0 ;  » ligne (pareillement pour b2_). Semble je dactylographiais un heh trop rapide de peu. Ainsi, il devient :
1 :
2 :
3 :
4 :
5 :
6 :
7 :
8 :
9 :
10 :
11 :
12 :
TAAA& TAAA : : operator= (taaa de const TAAA&) {
    TSuperAAA : : operator= (taaa) ;                   appel de // l'opérateur de tâche pour la classe basse
    si (ceci ! = &taaa) {                          contrôle de // pour la tâche d'individu
        suppression b1_ ;
        b1_ = 0 ;
        b1_ = nouveau TBBB (taaa.b1_) ;
        suppression b2_ ;
        b2_ = 0 ;
        b2_ = nouveau TBBB (taaa.b2_) ;
    }
    *this de retour ;
}
Autres solutions  
  •  MS Excel 2007 et pdf - l'exportation vers le pdf prend de longues heures !
  •  Dans le Perl, comment j'ajoute une valeur à la liste, puis le contrôle pour voir si la valeur existent avant d'ajouter une nouvelle valeur
  •  Comment fais j'initialiser de la HP BL460c G6 de san et de la HP XP 240000
  •  Comment fais j'employer une clef de permis de volume sur un ordinateur de HP avec du CD de restauration
  •  Emplacement primaire de deux SCCM dans l'annuaire actif
  •  L'initiateur et la HP D2D de l'iSCSI R2 du serveur 2008 de Windows GERCENT l'issue
  •  Stocker le dossier dans le mysql using connector.net et le champ de goutte
  •  Carte vidéo d'USB - bit 32 sur le matériel travaillant au niveau du bit 64 ?
  •  asp.net que j'essaye de convertir une forme de HTML en forme d'aspx ou ? ce qui jamais. Aide du besoin sur la façon dont à à elle.
  •  Winzip 12 issues de secours du travail ?
  •  
    programming4us programming4us