경고 C26410

매개 변수 'parameter'는 const 고유 포인터, 사용 const T* 또는 const T& 대신에 대한 참조입니다(r.32).

일반적으로 const 고유 포인터에 대한 참조는 의미가 없습니다. 원시 참조 또는 포인터로 안전하게 바꿀 수 있습니다. 이 경고는 C++ 핵심 지침 규칙 R.32를 적용합니다.

설명

  • 고유한 포인터 검사 스마트 포인터를 식별하기 위한 광범위한 기준이 있습니다. C++ 핵심 지침 규칙 R.31: std가 아닌 스마트 포인터가 있는 경우 std의 기본 패턴을 따라 고유한 포인터 및 공유 포인터 개념을 설명합니다. 추론은 간단하지만 놀라움으로 이어질 수 있습니다. 스마트 포인터 형식은 정의하거나 operator*정의하는 모든 형식 operator-> 입니다. 복사 가능 형식(공유 포인터)에는 Rvalue가 아닌 참조 매개 변수를 처리하는 공용 복사 생성자 또는 오버로드된 할당 연산자가 있어야 합니다.

  • 템플릿 코드는 시끄러운 경고를 생성할 수 있습니다. 참조를 포함하여 다양한 수준의 간접 참조를 사용하여 다양한 형식 매개 변수를 사용하여 템플릿을 인스턴스화할 수 있습니다. 일부 경고는 명확하지 않을 수 있으며 수정 시 템플릿의 일부 재작업이 필요할 수 있습니다(예: 참조 간접 참조의 명시적 제거). 템플릿 코드가 의도적으로 제네릭인 경우 경고를 표시하지 않을 수 있습니다.

코드 분석 이름: NO_REF_TO_CONST_UNIQUE_PTR

예시

불필요한 참조:

std::vector<std::unique_ptr<Tree>> roots = GetRoots();
std::for_each(
    roots.begin(),
    roots.end(),
    [](const auto &root) { Rebalance(root.get()); });   // C26410