다음을 통해 공유


경고 C26418

공유 포인터 매개 변수가 복사되거나 이동되지 않습니다. 대신 T* 또는 T>를 사용합니다.

C++ 핵심 지침: R.36: const shared_ptr<위젯>> 매개 변수를 사용하여 개체에 대한 참조 수를 유지할 수 있음을 나타냅니다.

공유 포인터 매개 변수가 값 또는 상수 개체에 대한 참조로 전달되는 경우 함수는 호출자에 영향을 주지 않고 대상 개체의 수명을 제어해야 합니다. 코드는 공유 포인터 매개 변수를 복사하거나 다른 공유 포인터 개체로 이동하거나 공유 포인터를 허용하는 함수를 호출하여 다른 코드에 전달해야 합니다. 그렇지 않으면 일반 포인터 또는 참조가 가능할 수 있습니다.

설명

  • 이 검사는 공유 포인터처럼 동작할 가능성이 있는 사용자 정의 형식과 인식 std::shared_pointer 합니다. 사용자 정의 공유 포인터에는 다음과 같은 특성이 필요합니다.

  • 오버로드된 역참조 또는 멤버 액세스 연산자(public 및 non-deleted);

  • 복사 생성자 또는 복사 할당 연산자(public 및 non-deleted);

  • 삭제되거나 기본값이 아닌 공용 소멸자입니다. 빈 소멸자는 여전히 사용자 정의로 계산됩니다.

예제

불필요한 인터페이스 복잡성

template<class T>
std::string to_string(const std::shared_ptr<T> &e) // C26418, also C26415 SMART_PTR_NOT_NEEDED
{
    return !e ? null_string : e->to_string();
}

불필요한 인터페이스 복잡성 - 간소화

template<class T>
std::string to_string(const T *e)
{
    return !e ? null_string : e->to_string();
}