C26404 DONT_DELETE_INVALIDC26404 DONT_DELETE_INVALID

Une fois que le pointeur de propriétaire libère ou transfère ses ressources, il obtient dans un état « non valide ».Once owner pointer releases or transfers its resource, it gets into an "invalid" state. Suppression de ce type de pointeur peut entraîner une corruption de mémoire immédiate en raison d’une suppression double ou à une violation d’accès lors de la ressource supprimée est accessible à partir d’un autre pointeur de propriétaire.Deleting such a pointer may lead to immediate memory corruption due to double delete, or to an access violation when the deleted resource is accessed from another owner pointer.

Exemple 1 : Supprimer un propriétaire d’après le transfert de sa valeurExample 1: Deleting an owner after transferring its value

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

Exemple 2 : Supprimer un propriétaire non initialiséExample 2: Deleting an uninitialized owner

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