Udostępnij przez


Ostrzeżenie C26418

Parametr wskaźnika współużytkowanego nie jest kopiowany ani przenoszony. Zamiast tego użyj języka T* lub T&.

Podstawowe wytyczne języka C++: R.36: Wykonaj const shared_ptr<widget>& parametru, aby wyrazić, że może zachować liczbę odwołań do obiektu

Jeśli współużytkowany parametr wskaźnika jest przekazywany przez wartość lub przez odwołanie do obiektu stałego, oczekuje się, że funkcja przejmie kontrolę nad okresem istnienia obiektu docelowego bez wpływu na obiekt wywołujący. Kod powinien kopiować lub przenosić udostępniony parametr wskaźnika do innego współużytkowanego obiektu wskaźnika lub przekazać go do innego kodu, wywołując funkcje, które akceptują udostępnione wskaźniki. W przeciwnym razie można wykonać zwykły wskaźnik lub odwołanie.

Uwagi

  • To sprawdzenie rozpoznaje std::shared_pointer i typy zdefiniowane przez użytkownika, które mogą zachowywać się jak wskaźniki udostępnione. Następujące cechy są oczekiwane dla wskaźników udostępnionych zdefiniowanych przez użytkownika:

  • przeciążone dereference lub operatory dostępu do składowych (publiczne i nieużywane);

  • konstruktor kopiujący lub operator przypisania kopiowania (publiczny i nieuwzwiązany);

  • publiczny destruktor, który nie jest usuwany ani domyślnie. Puste destruktory są nadal liczone jako zdefiniowane przez użytkownika.

Przykłady

niepotrzebne komplikacje interfejsu

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();
}

niepotrzebne komplikacje interfejsu — uproszczone

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