경고 C26403

포인터 'variable'(r.3)을 owner<T> 다시 설정하거나 명시적으로 삭제합니다.

소유자 포인터는 고유한 포인터와 같습니다. 리소스를 독점적으로 소유하고 리소스 릴리스 또는 다른 소유자에게 전송을 관리합니다. 이 검사 로컬 소유자 포인터가 함수의 모든 실행 경로를 통해 해당 리소스를 올바르게 기본 확인합니다. 리소스가 다른 소유자에게 전송되지 않았거나 명시적으로 해제되지 않은 경우 검사 경고하고 포인터 변수의 선언을 가리킵니다.

자세한 내용은 C++ 핵심 지침을 참조 하세요.

설명

  • 현재 이 검사 리소스를 해제하지 못하는 정확한 경로를 제공하지 않습니다. 이 동작은 이후 릴리스에서 개선될 수 있습니다. 수정할 정확한 위치를 찾기 어려울 수 있습니다. 더 나은 방법은 복잡한 함수의 일반 포인터를 위험을 방지하기 위해 고유한 포인터로 바꾸는 것입니다.

  • 검사 코드 분석을 차단하지 않기 위해 지나치게 복잡한 함수를 카드 수 있습니다. 일반적으로 함수의 복잡성은 적절한 임계값에서 기본 달성되어야 합니다. 명확한 수요가 있는 경우 C++ Core Guidelines 모듈에 로컬 복잡성 검사 추가하는 것을 고려할 수 있습니다. 이 제한은 데이터 흐름에 중요한 다른 규칙에 적용됩니다.

  • 포인터의 null 검사 후에만 메모리가 삭제되는 명확한 가양성 사례에서 경고가 발생할 수 있습니다. 이러한 가양성은 도구 API의 현재 제한 사항의 결과이지만 나중에 개선될 수 있습니다.

코드 분석 이름: RESET_OR_DELETE_OWNER

예시

오류 처리 중 누락된 클린:

gsl::owner<int*> sequence = GetRandomSequence(); // C26403

try
{
    StartSimulation(sequence);
}
catch (const std::exception& e)
{
    if (KnownException(e))
        return; // Skipping the path which deletes the owner.

    ReportException(e);
}

delete [] sequence;