Je suis tombé sur cette utilisation plutôt inhabituelle de «supprimer». Vous voulez juste savoir si la ligne suivante supprime les deux pointeurs ou seulement le premier?
Réponses
Trop de publicités?C'est sans doute une erreur. La virgule est ici l'opérateur virgule, pas un séparateur. Seul le premier pointeur, ptr1
est supprimé.
Le deuxième pointeur, ptr2
, est juste un faire-rien d'expression.
L' delete
opérateur a une priorité plus élevée que l' ,
de l'opérateur, de sorte que l'expression est analysée comme s'il avait été écrit:
(delete ptr1) , (ptr2)
et pas comme si il avait été écrit:
delete (ptr1 , ptr2)
Si ,
avaient une plus grande priorité que delete
, alors seulement le deuxième pointeur serait supprimé.
James McNellis est vrai que c'est l'opérateur virgule, mais il a la priorité de l'opérateur de mal. Il est (apparemment), en pensant qu'il travaille en tant que:
delete (ptr1, ptr2);
auquel cas il serait en droit-il serait de supprimer uniquement la deuxième question. En réalité, cependant, supprimer est également un opérateur, et a sensiblement une priorité plus élevée que l'opérateur virgule (ce qui est le plus bas de la priorité que possible), de sorte qu'il fonctionne vraiment comme:
(delete ptr1), ptr2;
De sorte qu'il supprime le premier pointeur, et le résultat de l'expression est la valeur de la deuxième pointeur -- qui n'a pas été supprimée, de sorte qu'il est encore valide (s'il a été précédemment).
J'avais echo Martin York conclusion, et je pense que cette sauvegarde. Je doute que même un pour cent de programmeurs C++ sais C++ ainsi que James McNellis -- lors de sa réponse sur ce qu'est une construction n'est faux, c'est une solide indication que presque personne ne peut savoir ce qu'il fait vraiment. J'avais postulons que personne ne peut être sûr c'est de faire ce qui était prévu. En fait, je suppose qu'il a l'intention de supprimer à la fois les objets, qu'il devrait ne pas faire (c'est à dire, ne le sera pas, à moins que le compilateur a un bug).
[Edit: je vois que pendant que j'écrivais ce, James a corrigé sa réponse. Mes excuses à James, mais je pense que la base de la conclusion des stands, donc je ne suis pas la suppression de cette, au moins pour l'instant.]
Juste en regardant ça me fait peur.
Ne pas utiliser cela, même si elle est légale que la plupart des gens doivent s'arrêter et de penser (et va toujours se tromper (l'une des deux premières réponses doit être erronée car ils se contredisent, mon premier instinct est des problèmes d'opérateur de virgule (mais je ne sais pas))).
Même maintenant, je ne répondrais pas à la question jusqu'à ce que j'ai ecmis un exemple et l'ai testé et même alors, j'aurais peur des cas de coin dans la langue qui causerait des problèmes.