Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
'
owner<T>' işaretçisini sıfırlama veya açıkça silme (r.3)
Sahip işaretçileri benzersiz işaretçiler gibidir: bir kaynağa özel olarak sahip olurlar ve kaynağın yayınını veya diğer sahiplere aktarımlarını yönetirler. Bu denetim, yerel sahip işaretçinin bir işlevdeki tüm yürütme yolları aracılığıyla kaynağını düzgün şekilde koruduğunu doğrular. Kaynak başka bir sahipe aktarılmış veya açıkça serbest bırakılmamışsa, denetleyici uyarır ve işaretçi değişkeninin bildirimine işaret eder.
Daha fazla bilgi için bkz . C++ Çekirdek Yönergeleri.
Açıklamalar
Şu anda bu denetim kaynağı serbest bırakamıyor tam yolu vermiyor. Bu davranış, gelecek sürümlerde geliştirilebilir. Bir düzeltme için tam konumu bulmak zor olabilir. Daha iyi bir yaklaşım, herhangi bir riskten kaçınmak için karmaşık işlevlerdeki düz işaretçileri benzersiz işaretçilerle değiştirmeyi denemektir.
Denetim, kod analizini engellememek için aşırı karmaşık bir işlevi atabilir. Genellikle işlevlerin karmaşıklığı makul bir eşik altında tutulmalıdır. Net bir talep varsa C++ Çekirdek Yönergeleri modülüne yerel bir karmaşıklık denetimi eklemeyi göz önünde bulundurabiliriz. Bu sınırlama, veri akışına duyarlı olan diğer kurallar için geçerlidir.
Uyarı, belleğin yalnızca işaretçinin null denetiminden sonra silindiği açıkça yanlış pozitif durumlarda tetiklenebilir. Bu hatalı pozitif sonuçlar, aracın API'sinin geçerli bir sınırlamasının sonucu olur, ancak gelecekte geliştirilebilir.
Kod analizi adı: RESET_OR_DELETE_OWNER
Örnek
Hata işleme sırasında eksik temizleme:
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;