Dans un récent débat, Daniel Lidström a affirmé qu'un shared_ptr
Implémentation de Shared_Ptr sans destructeurs virtuels
La clé de cette implémentation réside dans l'effacement de type. Shared_ptr stocke bien plus que de simples compteurs de référence ; il comprend un suppresseur (stocké dans le cadre de la structure de données) qui gère la destruction des objets. Ce suppresseur peut être de n'importe quel type, permettant une personnalisation au-delà de la portée de T (le type de modèle de shared_ptr).
Personnalisation des classes dérivées
Lors de la création d'un shared_ptr< ;Base> à partir d'un objet Derived, un constructeur basé sur un modèle est invoqué, permettant la spécification du type concret Derived. Le constructeur crée le suppresseur nécessaire avec la connaissance du type dynamique, garantissant une destruction correcte des objets même sans destructeur virtuel dans Base.
Exemple d'implémentation
template<class T> class shared_ptr { public: ... template<class Y> explicit shared_ptr(Y* p); ... };
Ce qui précède Le constructeur permet la création d'un constructeur shared_ptr
Exigences de la norme C 11
La norme C 11 exige explicitement ce comportement :
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!