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.
"változó" mutató alaphelyzetbe állítása vagy explicit törlése
owner<T>(r.3)
A tulajdonosmutatók olyanok, mint az egyedi mutatók: kizárólag egy erőforrást birtokolnak, és kezelik az erőforrás kiadását vagy más tulajdonosoknak történő átvitelét. Ez az ellenőrzés ellenőrzi, hogy egy helyi tulajdonos mutatója megfelelően tartja-e fenn az erőforrást egy függvény összes végrehajtási útvonalán keresztül. Ha az erőforrás nem lett átadva egy másik tulajdonosnak, vagy nem lett explicit módon felszabadítva, az ellenőrző figyelmezteti, és a mutatóváltozó deklarációjára mutat.
További információkért tekintse meg a C++ alapvető irányelveit.
Megjegyzések
Ez az ellenőrzés jelenleg nem adja meg azt az elérési utat, amely nem tudja felszabadítani az erőforrást. Ez a viselkedés a jövőbeni kiadásokban javítható. Előfordulhat, hogy a javítás pontos helyét nehéz megtalálni. A jobb módszer az, ha az összetett függvények egyszerű mutatóit egyedi mutatókkal próbálja lecserélni a kockázatok elkerülése érdekében.
Az ellenőrzés elvethet egy túlbonyolult függvényt, hogy ne tiltsa le a kódelemzést. A függvények összetettségét általában ésszerű küszöbérték alatt kell tartani. Ha egyértelmű igény van rá, érdemes lehet helyi összetettségi ellenőrzést hozzáadni a C++ Alapvető irányelvek modulhoz. Ez a korlátozás az adatfolyamokra érzékeny egyéb szabályokra is vonatkozik.
A figyelmeztetés egyértelműen hamis pozitív eseteket okozhat, amikor a memória csak a mutató null ellenőrzése után törlődik. Ezek a hamis pozitív értékek az eszköz API-jának jelenlegi korlátozásából erednek, de a jövőben tovább fejleszthetők.
Kódelemzés neve: RESET_OR_DELETE_OWNER.
példa
Hiányzó törlés a hibakezelés során:
gsl::owner<int*> sequence = GetRandomSequence(); // C26403
try
{
StartSimulation(sequence);
}
catch (const std::exception& e)
{
if (KnownException(e))
return; // Skipping the path which deletes the owner.
ReportException(e);
}
delete [] sequence;