Risques liés à la dérivation à partir de conteneurs C STL
Malgré les avantages potentiels de la dérivation de classes à partir de conteneurs C STL, tels que la surcharge de fonctions, la spécialisation des modèles et un débogage amélioré, il existe des risques inhérents associés à cette approche.
Considérez les points suivants exemple :
#include <vector> class Rates : public std::vector<double> { }; class Charges : public std::vector<double> { }; int main() { auto p1 = new Rates; auto p2 = new Charges; kill_it(p2); // User code that knows nothing about Rates or Charges kill_it(p1); return 0; }
La fonction kill_it supprime la mémoire de la victime lors de l'exécution du destructeur non virtuel de std::vector
Le problème se pose si l'utilisateur introduit par inadvertance des erreurs dans la fonction kill_it ??? section. Par exemple, si l'utilisateur modifie p2 pour pointer vers un objet Rates avant d'appeler kill_it(p2), le destructeur non virtuel de std::vector
Pour atténuer ce risque, il est généralement recommandé d'utiliser la composition au lieu de la dérivation lors de la manipulation des conteneurs STL. La composition permet une approche plus flexible et moins sujette aux erreurs.
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!