Megosztás:


Figyelmeztetés C26418

A megosztott mutatóparaméter nincs másolva vagy áthelyezve. Használja inkább a T* vagy a T> elemet.

C++ alapvető irányelvek: R.36: Használjon const shared_ptr<widget>> paramétert annak kifejezéséhez, hogy megtarthatja az objektum hivatkozásainak számát

Ha egy megosztott mutatóparamétert érték vagy állandó objektumra hivatkozva ad át, a függvénynek a hívó befolyásolása nélkül kell irányítania a célobjektum élettartamát. A kódnak át kell másolnia vagy át kell helyeznie a megosztott mutató paraméterét egy másik megosztott mutatóobjektumba, vagy más kódnak kell átadnia a megosztott mutatókat elfogadó függvények meghívásával. Ellenkező esetben egy egyszerű mutató vagy hivatkozás megvalósítható lehet.

Megjegyzések

  • Ez az ellenőrzés felismeri a std::shared_pointer-t, valamint a felhasználó által definiált típusokat, amelyek valószínűleg megosztott mutatóként viselkednek. A felhasználó által definiált megosztott mutatók esetében a következő jellemzők várhatók:

  • túlterhelt hivatkozásfeloldó vagy tag-hozzáférési operátorok (amelyek nyilvánosak és nem lettek törölve);

  • másolási konstruktor vagy másolás-hozzárendelési operátor (nyilvános és nem törölt);

  • nyilvános destruktor, amely nincs törölve vagy alapértelmezés szerint törölve. Az üres destruktorok továbbra is felhasználó által definiáltnak számítanak.

Példák

szükségtelen felületi bonyodalom

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

szükségtelen felületi bonyodalom – egyszerűsített

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