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