Raisons pour éviter d'hériter de la classe C std::string
En Effective C, la recommandation d'éviter d'hériter de std::string est basé sur son absence de destructeur virtuel et son inadéquation en tant que classe de base, même à des fins polymorphes. Comprendre les exigences spécifiques pour qu'une classe soit considérée comme une classe de base et les conséquences de la dérivation de std::string clarifie davantage cette position.
Éligibilité à l'héritage de classe de base
L'héritabilité en C est étroitement liée à la nécessité d'un comportement polymorphe. L'héritage public ne doit être utilisé que lorsqu'une classe a l'intention d'être accessible via des pointeurs ou des références, permettant une liaison dynamique. Sinon, les fonctions ou compositions libres sont les mécanismes préférés pour la réutilisation du code.
std::string comme classe de base
Dans le cas de std::string, le l'absence de destructeur virtuel l'empêche de prendre en charge efficacement le comportement polymorphe. De plus, sa conception interne n'est pas destinée à être utilisée comme classe de base.
Problèmes liés à la dérivation de std::string
La dérivation de std::string introduit des problèmes potentiels en raison du comportement de découpage en C . Par exemple, si une fonction attend un paramètre std::string, la transmission d'un objet dérivé entraînera une copie tronquée qui exclura les membres supplémentaires de la classe dérivée. Cela peut entraîner des incohérences et un comportement indéfini.
Empêcher l'utilisation d'une classe de base non polymorphe
Pour empêcher les clients d'utiliser une classe de base uniquement à des fins de réutilisation comme s'il s'agissait d'un classe de base polymorphe, les techniques suivantes peuvent être utilisées :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!