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.
"Pindahkan, salin, menetapkan ulang, atau mengatur ulang penunjuk cerdas lokal."
Pedoman Inti C++:
R.5: Lebih suka objek tercakup, jangan alokasikan tumpukan yang tidak perlu
Penunjuk cerdas nyaman untuk manajemen sumber daya dinamis, tetapi tidak selalu diperlukan. Misalnya, mungkin lebih mudah dan lebih efisien untuk mengelola buffer dinamis lokal dengan menggunakan kontainer standar. Anda mungkin tidak memerlukan alokasi dinamis sama sekali untuk satu objek, misalnya, jika mereka tidak pernah mengulurkan fungsi pembuatnya. Mereka dapat diganti dengan variabel lokal. Pointer pintar menjadi berguna ketika skenario memerlukan perubahan kepemilikan. Misalnya, saat Anda menetapkan ulang sumber daya dinamis beberapa kali, atau di beberapa jalur. Mereka juga berguna untuk sumber daya yang diperoleh dari kode eksternal. Dan, ketika pointer pintar digunakan untuk memperpanjang masa pakai sumber daya.
Keterangan
Pemeriksaan ini mengenali standar std::unique_pointer dan std::shared_pointer templat, dan jenis yang ditentukan pengguna yang kemungkinan dimaksudkan untuk menjadi penunjuk cerdas. Jenis tersebut diharapkan untuk menentukan operasi berikut:
dereferensi berlebih atau operator akses anggota yang bersifat publik dan tidak ditandai sebagai dihapus;
destruktor publik yang tidak dihapus atau default. Itu termasuk destruktor yang secara eksplisit didefinisikan sebagai kosong.
Jenis Microsoft::WRL::ComPtr ini berperilaku sebagai penunjuk bersama, tetapi sering digunakan dalam skenario tertentu yang dipengaruhi oleh manajemen masa pakai COM. Untuk menghindari kebisingan yang berlebihan, jenis ini difilter.
Pemeriksaan ini mencari alokasi lokal eksplisit yang ditetapkan ke penunjuk cerdas, untuk mengidentifikasi apakah variabel terlingkup dapat berfungsi sebagai alternatif. Baik panggilan langsung ke operator new, dan fungsi khusus seperti std::make_unique dan std::make_shared, ditafsirkan sebagai alokasi langsung.
Nama analisis kode: RESET_LOCAL_SMART_PTR
Contoh
Buffer dinamis:
void unpack_and_send(const frame &f)
{
auto buffer = std::make_unique<char[]>(f.size()); // C26414
f.unpack(buffer.get());
// ...
}
Buffer dinamis digantikan oleh kontainer:
void unpack_and_send(const frame &f)
{
auto buffer = std::vector<char>(f.size());
f.unpack(buffer.data());
// ...
}