Condividi tramite


Avviso C26404

Non eliminare uno owner<T> stato che potrebbe non essere valido (r.3)

Osservazioni:

Quando un puntatore proprietario rilascia o trasferisce la risorsa, diventa in uno stato "non valido". L'eliminazione di un puntatore di questo tipo può causare un danneggiamento immediato della memoria a causa di un'eliminazione doppia o di una violazione di accesso quando si accede alla risorsa eliminata da un altro puntatore proprietario.

Nome dell'analisi del codice: DONT_DELETE_INVALID

Esempio 1

Eliminazione di un proprietario dopo il trasferimento del relativo valore:

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

Esempio 2

Eliminazione di un proprietario non inizializzato:

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