Uyarı C26416
Paylaşılan işaretçi parametresi rvalue başvurusu tarafından geçirilir. Bunun yerine değere göre geçirin.
C++ Temel Yönergeleri: R.34: bir işlevin parça sahibi olduğunu belirtmek için shared_ptr<pencere öğesi> parametresi alın
Paylaşılan bir işaretçiyi rvalue başvurusuyla geçirmek nadiren gereklidir. Paylaşılan işaretçi türünün kendisi için taşıma semantiğinin bir uygulaması olmadığı sürece, paylaşılan işaretçi nesneleri değere göre güvenli bir şekilde geçirilebilir. Rvalue başvurusunun kullanılması, benzersiz işaretçinin çağırandan çağırana açıkça benzersiz sahiplik aktardığından daha uygun olduğunu gösteren bir gösterge de olabilir.
Açıklamalar
Bu denetim, paylaşılan işaretçiler
std::shared_pointer
gibi davranma olasılığı olan ve kullanıcı tanımlı türleri tanır. Kullanıcı tanımlı paylaşılan işaretçiler için aşağıdaki özellikler beklenir:aşırı başvuru veya üye erişim işleçleri (genel ve silinmemiş);
kopyalama oluşturucu veya kopyalama atama işleci (genel ve silinmemiş);
silinmemiş veya varsayılan olarak ayarlanmamış bir genel yıkıcı. Boş yıkıcılar yine de kullanıcı tanımlı olarak sayılır.
Örnekler
Sorgulanabilir oluşturucu iyileştirmesi:
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)
{}
Sorgulanabilir oluşturucu iyileştirmesi - basitleştirilmiş:
action::action(std::shared_ptr<transaction> t) noexcept
: transaction_(std::move(t))
{}