Partager via


Avertissement C26416

Le paramètre de pointeur partagé est passé par référence rvalue. Passez plutôt par valeur.

Instructions principales C++ : R.34 : Prendre un paramètre de widget> shared_ptr<pour exprimer qu’une fonction est propriétaire de partie

Le passage d’un pointeur partagé par référence rvalue est rarement nécessaire. Sauf s’il s’agit d’une implémentation de sémantique de déplacement pour un type de pointeur partagé lui-même, les objets de pointeur partagé peuvent être transmis en toute sécurité par valeur. L’utilisation de la référence rvalue peut également indiquer que le pointeur unique est plus approprié, car il transfère clairement la propriété unique de l’appelant à l’appelé.

Notes

  • Cette vérification reconnaît et les std::shared_pointer types définis par l’utilisateur susceptibles de se comporter comme des pointeurs partagés. Les caractéristiques suivantes sont attendues pour les pointeurs partagés définis par l’utilisateur :

  • les opérateurs d’accès aux membres ou de déréférencement surchargés (publics et non supprimés) ;

  • un constructeur de copie ou un opérateur d’affectation de copie (public et non supprimé) ;

  • destructeur public qui n’est pas supprimé ou par défaut. Les destructeurs vides sont toujours comptabilisés comme définis par l’utilisateur.

Exemples

Optimisation du constructeur interrogeable :

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

Optimisation du constructeur interrogeable - simplifiée :

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