Comprendre les plantages d'« appel de fonction virtuelle pure »
En programmation, les erreurs d'« appel de fonction virtuelle pure » peuvent parfois provoquer le crash brutal des programmes. Ces erreurs surviennent lorsqu'une tentative est faite d'appeler une fonction virtuelle pure lors de la construction ou de la destruction d'un objet.
Fonctions virtuelles pures
Une fonction virtuelle pure est une fonction membre de une classe abstraite qui n'a qu'une déclaration mais pas d'implémentation. Il oblige les classes dérivées à implémenter leurs propres versions de la fonction.
Limitations du constructeur et du destructeur
Les fonctions constructeur et destructeur sont appelées respectivement lors de l'initialisation et de la destruction de l'objet. Pendant ces fonctions spéciales, les appels de fonctions virtuelles sont interdits car :
Source des plantages
Des plantages d'"appel de fonction virtuelle pure" se produisent lorsque :
Exemple
Considérez ce code :
class Base { public: Base() { reallyDoIt(); } void reallyDoIt() { doIt(); } // DON'T DO THIS virtual void doIt() = 0; }; class Derived : public Base { void doIt() {} }; int main(void) { Derived d; // This will cause "pure virtual function call" error }
Dans cet exemple, l'appel à RealDoIt() dans le constructeur de base tente d'appeler la fonction virtuelle pure doIt(). Puisque le constructeur est appelé, l'objet de classe dérivé n'a pas encore été construit et une erreur « appel de fonction virtuelle pure » se produit.
Résolution
Pour éviter ces problèmes plante, évitez d'appeler des fonctions virtuelles pures à partir de constructeurs ou de destructeurs. Au lieu de cela, assurez-vous que les classes dérivées fournissent leurs propres implémentations avant d'appeler les fonctions virtuelles pures.
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!