Bagikan melalui


Peringatan C26410

Parameter 'parameter' adalah referensi untuk mengkonsumsi pointer unik, gunakan const T* atau const T& sebagai gantinya (r.32)

Umumnya, referensi ke const unique pointer tidak ada artinya. Mereka dapat dengan aman digantikan oleh referensi mentah atau pointer. Peringatan ini memberlakukan aturan Pedoman Inti C++ R.32.

Keterangan

  • Pemeriksaan pointer unik memiliki kriteria yang agak luas untuk mengidentifikasi penunjuk pintar. Aturan Pedoman Inti C++ R.31: Jika Anda memiliki penunjuk cerdas non-std, ikuti pola dasar dari std menjelaskan konsep pointer dan pointer bersama yang unik. Heuristiknya sederhana, tetapi dapat menyebabkan kejutan: jenis penunjuk cerdas adalah jenis apa pun yang mendefinisikan atau operator->operator*. Jenis yang dapat disalin (penunjuk bersama) harus memiliki konstruktor salinan publik atau operator penugasan yang kelebihan beban yang berkaitan dengan parameter referensi non-Rvalue.

  • Kode templat dapat menghasilkan peringatan yang bising. Perlu diingat bahwa templat dapat dibuat dengan berbagai parameter jenis dengan tingkat tidak langsung yang berbeda, termasuk referensi. Beberapa peringatan mungkin tidak jelas dan perbaikan mungkin memerlukan beberapa pengerjaan ulang templat (misalnya, penghapusan eksplisit tidak langsung referensi). Jika kode templat sengaja generik, peringatan dapat ditekan.

Nama analisis kode: NO_REF_TO_CONST_UNIQUE_PTR

Contoh

Referensi yang tidak perlu:

std::vector<std::unique_ptr<Tree>> roots = GetRoots();
std::for_each(
    roots.begin(),
    roots.end(),
    [](const auto &root) { Rebalance(root.get()); });   // C26410