Pourquoi devrait-on s'abstenir de dériver de std::string
Dans son livre Effective C , Scott Meyers déconseille de dériver du std : :string classe, principalement en raison de son absence de destructeur virtuel. Cependant, ce n'est pas la seule raison d'éviter un tel héritage.
Définition des critères d'héritage
Pour servir de classe de base appropriée, une classe doit :
std::string comme base Class
std::string ne répond pas à ces critères pour les raisons suivantes :
De plus, même dans les scénarios où l'héritage est uniquement destiné à la réutilisabilité, C manque de mécanismes pour empêcher les clients de créer objets d’une classe dérivée à l’aide d’un pointeur de classe de base. Cela peut violer l'objectif visé par la restriction d'une telle utilisation.
Conséquences de la violation de l'héritage
Ignorer ces directives peut entraîner un code :
En conclusion, l'héritage en C devrait être réservé à situations polymorphes, et std::string ne doit pas être utilisé comme classe de base en raison de ses contraintes de conception et du problème de découpage. L'emploi de méthodes alternatives telles que les fonctions non membres ou la composition favorise les pratiques idiomatiques du C et garantit la clarté et la fiabilité du code.
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!