Partager via


Avertissement C26404

Ne supprimez pas un owner<T> état non valide (r.3)

Notes

Une fois qu’un pointeur propriétaire libère ou transfère sa ressource, il est dans un état « non valide ». La suppression d’un tel pointeur peut entraîner une altération immédiate de la mémoire en raison d’une double suppression ou d’une violation d’accès lorsque la ressource supprimée est accessible à partir d’un autre pointeur propriétaire.

Nom de l’analyse du code : DONT_DELETE_INVALID

Exemple 1

Suppression d’un propriétaire après avoir transféré sa valeur :

gsl::owner<State*> validState = nullptr;
gsl::owner<State*> state = ReadState();
validState = state;
if (!IsValid(state))
    delete state;   // C26404

Exemple 2

Suppression d’un propriétaire non initialisé :

gsl::owner<Message*> message;
if (popLast)
    message = ReleaseMessage();
delete message; // C26404