Warnung C26404

Löschen Sie owner<T> keinen ungültigen Zustand (r.3)

Hinweise

Sobald ein Besitzerzeiger seine Ressource loslässt oder überträgt, wird er in einen "ungültigen" Zustand versetzt. Das Löschen eines solchen Zeigers kann zu einer sofortigen Speicherbeschädigung aufgrund eines doppelten Löschens oder zu einer Zugriffsverletzung führen, wenn von einem anderen Besitzerzeiger auf die gelöschte Ressource zugegriffen wird.

Codeanalysename: DONT_DELETE_INVALID

Beispiel 1

Löschen eines Besitzers nach dem Übertragen seines Werts:

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

Beispiel 2

Löschen eines nicht initialisierten Besitzers:

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