Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
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();
}