Поделиться через


Предупреждение C26404

Не удаляйте недопустимое owner<T> состояние (r.3)

Замечания

После выпуска указателя владельца или передачи ресурса он попадает в недопустимое состояние. Удаление такого указателя может привести к немедленному повреждению памяти из-за двойного удаления или нарушения доступа при доступе к удаленному ресурсу из другого указателя владельца.

Имя анализа кода: DONT_DELETE_INVALID

Пример 1

Удаление владельца после передачи его значения:

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

Пример 2

Удаление неинициализированного владельца:

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