Aviso C26404

Não exclua um owner<T> que possa estar em estado inválido (r.3)

Comentários

Depois que um ponteiro proprietário libera ou transfere seu recurso, ele fica em um estado "inválido". A exclusão desse ponteiro pode levar à corrupção de memória imediata devido à exclusão dupla ou a uma violação de acesso quando o recurso excluído é acessado de outro ponteiro do proprietário.

Nome da análise de código: DONT_DELETE_INVALID

Exemplo 1

Excluindo um proprietário após transferir seu valor:

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

Exemplo 2

Excluindo um proprietário não inicializado:

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