Compartir vía


Advertencia C26404

No elimine un owner<T> que puede estar en estado no válido (r.3)

Comentarios

Una vez que un puntero de propietario libera o transfiere su recurso, entra en un estado "no válido". Eliminar este puntero puede provocar daños inmediatos en la memoria debido a la doble eliminación o a una infracción de acceso cuando se accede al recurso eliminado desde otro puntero propietario.

Nombre del análisis de código: DONT_DELETE_INVALID

Ejemplo 1

Eliminar un propietario después de transferir su valor:

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

Ejemplo 2

Eliminar un propietario sin inicializar:

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