Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Mengatur ulang atau secara eksplisit menghapus
owner<T>'variabel' penunjuk (r.3)
Penunjuk pemilik seperti pointer unik: mereka memiliki sumber daya secara eksklusif, dan mengelola rilis sumber daya, atau transfernya ke pemilik lain. Pemeriksaan ini memvalidasi bahwa penunjuk pemilik lokal mempertahankan sumber dayanya dengan benar melalui semua jalur eksekusi dalam fungsi. Jika sumber daya tidak ditransfer ke pemilik lain, atau tidak dirilis secara eksplisit, pemeriksa memperingatkan, dan menunjuk ke deklarasi variabel penunjuk.
Untuk informasi selengkapnya, lihat Panduan Inti C++.
Keterangan
Saat ini pemeriksaan ini tidak memberikan jalur yang tepat yang gagal merilis sumber daya. Perilaku ini dapat ditingkatkan dalam rilis mendatang. Mungkin sulit untuk menemukan lokasi yang tepat untuk perbaikan. Pendekatan yang lebih baik adalah mencoba mengganti pointer biasa dalam fungsi kompleks dengan pointer unik untuk menghindari risiko apa pun.
Pemeriksaan dapat membuang fungsi yang terlalu rumit agar tidak memblokir analisis kode. Umumnya, kompleksitas fungsi harus dipertahankan di bawah beberapa ambang yang wajar. Kami dapat mempertimbangkan untuk menambahkan pemeriksaan kompleksitas lokal ke modul Pedoman Inti C++ jika ada permintaan yang jelas untuknya. Batasan ini berlaku untuk aturan lain yang sensitif terhadap aliran data.
Peringatan dapat diaktifkan pada kasus positif yang jelas palsu di mana memori dihapus hanya setelah pemeriksaan null pointer. Positif palsu ini adalah hasil dari batasan API alat saat ini, tetapi dapat ditingkatkan di masa depan.
Nama analisis kode: RESET_OR_DELETE_OWNER
Contoh
Pembersihan hilang selama penanganan kesalahan:
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;