경고 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