Bagikan melalui


Peringatan C26416

Parameter pointer bersama diteruskan oleh referensi rvalue. Lewati berdasarkan nilai sebagai gantinya.

Pedoman Inti C++: R.34: Ambil parameter widget> shared_ptr<untuk mengekspresikan kepemilikan bersama

Meneruskan pointer bersama dengan referensi rvalue jarang diperlukan. Kecuali itu adalah implementasi semantik pemindahan untuk jenis pointer bersama itu sendiri, objek pointer bersama dapat diteruskan dengan aman oleh nilai. Menggunakan referensi rvalue mungkin juga merupakan indikasi bahwa pointer unik lebih tepat karena dengan jelas mentransfer kepemilikan unik dari penelepon ke penerima panggilan.

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

Pengoptimalan konstruktor yang dipertanyakan:

action::action(std::shared_ptr<transaction> &&t) noexcept // C26416
    : transaction_(std::move(t))
{}

action::action(std::shared_ptr<transaction> &t) noexcept  // also C26417 LVALUE_REF_SHARED_PTR
    : transaction_(t)
{}

Pengoptimalan konstruktor yang dipertanyakan - disederhanakan:

action::action(std::shared_ptr<transaction> t) noexcept
    : transaction_(std::move(t))
{}