Partager via


Avertissement C26418

Le paramètre de pointeur partagé n’est pas copié ni déplacé. Utilisez plutôt T* ou T>.

Instructions principales C++ : R.36 : Prendre un paramètre const shared_ptr<widget>> pour exprimer qu’il peut conserver un nombre de références à l’objet

Si un paramètre de pointeur partagé est passé par valeur ou par référence à un objet constant, la fonction est censée prendre le contrôle de la durée de vie de l’objet cible sans affecter l’appelant. Le code doit copier ou déplacer le paramètre de pointeur partagé vers un autre objet de pointeur partagé, ou le transmettre à d’autres codes en appelant des fonctions qui acceptent des pointeurs partagés. Sinon, un pointeur ou une référence simple peut être réalisable.

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

complications d’interface inutiles

template<class T>
std::string to_string(const std::shared_ptr<T> &e) // C26418, also C26415 SMART_PTR_NOT_NEEDED
{
    return !e ? null_string : e->to_string();
}

complications d’interface inutiles - simplifiée

template<class T>
std::string to_string(const T *e)
{
    return !e ? null_string : e->to_string();
}