Aracılığıyla paylaş


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))
{}