Bagikan melalui


Peringatan C26418

Parameter pointer bersama tidak disalin atau dipindahkan. Gunakan T* atau T& sebagai gantinya.

C++ Pedoman Inti: R.36: Ambil shared_ptr< widget & parameter const>untuk mengekspresikan bahwa mungkin mempertahankan jumlah referensi ke objek

Jika parameter pointer bersama diteruskan oleh nilai atau dengan merujuk ke objek konstanta, fungsi diharapkan untuk mengontrol masa pakai objek target tanpa memengaruhi pemanggil. Kode harus menyalin atau memindahkan parameter pointer bersama ke objek pointer bersama lainnya, atau meneruskannya ke kode lain dengan memanggil fungsi yang menerima pointer bersama. Jika tidak, pointer atau referensi biasa mungkin layak.

Keterangan

  • Pemeriksaan ini mengenali std::shared_pointer dan jenis yang ditentukan pengguna yang cenderung berperilaku seperti pointer bersama. Ciri-ciri berikut diharapkan untuk pointer bersama yang ditentukan pengguna:

  • dereferensi berlebih atau operator akses anggota (publik dan tidak dihapus);

  • konstruktor salinan atau operator penugasan salinan (publik dan tidak dihapus);

  • destruktor publik yang tidak dihapus atau default. Destruktor kosong masih dihitung sebagai ditentukan pengguna.

Contoh

komplikasi antarmuka yang tidak perlu

template<class T>
std::string to_string(const std::shared_ptr<T> &e) // C26418, also C26415 SMART_PTR_NOT_NEEDED
{
    return !e ? null_string : e->to_string();
}

komplikasi antarmuka yang tidak perlu - disederhanakan

template<class T>
std::string to_string(const T *e)
{
    return !e ? null_string : e->to_string();
}