Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A paraméter egy egyedi mutatóra mutató hivatkozás, és soha nem rendeli vissza, nem állítja vissza, nem használja
T*vagyT&helyette (r.33)
Ha hivatkozással ad át egyedi mutatót egy függvénynek, az azt jelenti, hogy az erőforrás felszabadítható vagy átadható a függvényen belül. Ha a függvény csak az erőforrás eléréséhez használja a paraméterét, biztonságosan átadhat egy nyers mutatót vagy egy hivatkozást. További információ: C++ Alapvető irányelvek R.33 szabály: Vegyünk egy unique_ptr<widget>> paramétert annak kifejezéséhez, hogy egy függvény újra ellátja a widgetet.
Megjegyzések
A C26410 figyelmeztetés korlátozásai itt is érvényesek.
Az egyedi mutató észlelésére
releasevagyresetelérésére vonatkozó heurisztikus naiv. Csak a hozzárendelési operátorok és a nevesítettresetfüggvények hívásait észleljük (kis- és nagybetűk megkülönböztetése). Nyilvánvaló, hogy ez az észlelés nem fedi le az intelligens mutató módosításainak összes lehetséges esetét. (Például nem észlelistd::swapaz egyéni intelligens mutatóban lévő speciális nem-függvényeketconst). Arra számítunk, hogy ez a figyelmeztetés számos hamis pozitív eredményt fog eredményezni az egyéni típusok esetében, és bizonyos esetekben a standard egyedi mutatókkal foglalkozik. A heurisztikus fejlesztésre számítunk, mivel több, intelligens mutatóra összpontosító ellenőrzést hajtunk végre.Az a tény, hogy az intelligens mutatók gyakran sablonok, érdekes korlátozásokat eredményeznek. A fordító nem szükséges sablonkódok sablonkódjainak feldolgozásához, ha nincs használatban. Az intelligens mutatófelületek korlátozott használatát lehetővé tevő kódban az ellenőrző váratlan eredményeket hozhat. Az ellenőrző nem tudja megfelelően azonosítani a sablontípus szemantikáját, mert előfordulhat, hogy egyes függvények soha nem lesznek használatban. A szabvány
std::unique_ptresetében ez a korlátozás a típus nevének felismerésével csökkenthető. Ez az elemzés a jövőben kiterjeszthető, hogy ismertebb intelligens mutatókat fedjen le.Az implicit rögzítést használó Lambda-kifejezések meglepő figyelmeztetésekhez vezethetnek az egyedi mutatókra való hivatkozásokkal kapcsolatban. Jelenleg a lambdas összes rögzített referenciaparaméterét jelenti a rendszer, függetlenül attól, hogy alaphelyzetbe állnak-e vagy sem. Egy későbbi kiadás kiterjesztheti a heurisztikust a lambdamezők és lambdaparaméterek korrelációjához.
Kódelemzés neve: NO_REF_TO_UNIQUE_PTR.
Példa: Szükségtelen hivatkozás
void TraceValid(std::unique_ptr<Slot> &slot) // C26411
{
if (!IsDamaged(slot.get()))
std::cout << *slot.get();
}
void ReleaseValid(std::unique_ptr<Slot> &slot) // OK
{
if (!IsDamaged(slot.get()))
slot.reset(nullptr);
}