2009-11-15 3 views
3

Je me demandais s'il est sûr de le faire ...Attribution de pointeur immédiatement après la suppression

delete p_pointer; 
p_pointer = p_otherPointer; 

Plutôt que ...

delete p_pointer; 
p_pointer = 0; 
p_pointer = p_otherPointer; 

Je suppose que oui car il n'y a pas toute nouvelle allocation de mémoire entre la suppression et l'affectation, mais je veux juste m'en assurer.

Répondre

16

Oui c'est sans danger. Il est inutile de définir le pointeur supprimé sur NULL si vous êtes sur le point de le réaffecter de toute façon. La raison pour laquelle les utilisateurs ont défini des pointeurs supprimés sur NULL est qu'ils peuvent les "marquer" comme étant supprimés, afin qu'ils puissent ensuite vérifier s'ils ont déjà été supprimés.

+1

Et parce que s'ils appellent par mégarde 'delete' contre, il est censé se comporter bien sur un pointeur NULL. –

6

Oui. delete est un opérateur. Vous lui passez un pointeur et il supprime l'objet pointé par ce pointeur. Cela ne fait rien au pointeur lui-même.

Après ce point, vous ne pouvez plus déréférencer un pointeur avec la valeur que ce pointeur a, mais vous pouvez continuer à utiliser la variable de pointeur lui-même, par exemple en l'orientant vers un objet différent du type approprié.

1

En fait auto_ptr::reset fait exactement cela (au moins dans les mises en œuvre, je l'ai vu)

Questions connexes