>> 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 :