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