Megosztás:


Figyelmeztetés C26416

A megosztott mutató paraméterét a rvalue-referencia adja át. Adja át inkább érték szerint.

C++ alapvető irányelvek: R.34: Shared_ptr widgetparaméter> használata<a megosztott tulajdonjog kifejezéséhez

Ritkán szükséges a megosztott mutató átengedése rvalue-hivatkozással. Ha nem egy megosztott mutatótípus áthelyezési szemantikájának implementációja, a megosztott mutatóobjektumok érték szerint biztonságosan átadhatók. A rvalue-hivatkozás használata azt is jelezheti, hogy az egyedi mutató megfelelőbb, mivel egyértelműen egyedi tulajdonjogot ad át a hívótól a hívónak.

Megjegyzések

  • Ez az ellenőrzés felismeri std::shared_pointer és felhasználó által definiált típusok, amelyek valószínűleg megosztott mutatóként viselkednek. A felhasználó által definiált megosztott mutatók esetében a következő jellemzők várhatók:

  • túlterhelt hareferencia vagy taghozzáférési operátorok (nyilvános és nem törölt);

  • másolási konstruktor vagy másolás-hozzárendelési operátor (nyilvános és nem törölt);

  • nyilvános destruktor, amely nincs törölve vagy alapértelmezés szerint törölve. Az üres destruktorok továbbra is felhasználó által definiáltnak számítanak.

Példák

Megkérdőjelezhető konstruktoroptimalizálás:

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

Megkérdőjelezhető konstruktoroptimalizálás – egyszerűsített:

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