Classe virtuelle pure & destructeur

Classe virtuelle pure & destructeur - C++ - Programmation

Marsh Posté le 10-10-2006 à 11:38:56    

Je n'arrive pas bien à comprendre pourquoi le code suivant n'est pas valide.
Visiblement je ne peux pas appeller ma fonction virtuelle pure (foo) dans le desctructeur mais je ne vois pas pourquoi
 

Code :
  1. class T
  2. {
  3. public:
  4.   virtual ~T();
  5.   virtual void foo() = 0;
  6. };
  7. class S : public T
  8. {
  9. public:
  10.   virtual void foo();
  11. };
  12. T::~T()
  13. {
  14.   foo(); //<-- Le problème est ici (" error: abstract virtual `virtual void T::foo()' called from destructor" )
  15. }
  16. void S::foo()
  17. {
  18. //some code
  19. }

Reply

Marsh Posté le 10-10-2006 à 11:38:56   

Reply

Marsh Posté le 10-10-2006 à 20:49:41    

parce qu'à ce stade, la partie dérivée est déjà détruite, donc tu ne peux pas appeler S::foo()

Reply

Marsh Posté le 10-10-2006 à 20:51:05    

dweis a écrit :

Je n'arrive pas bien à comprendre pourquoi le code suivant n'est pas valide.
Visiblement je ne peux pas appeller ma fonction virtuelle pure (foo) dans le desctructeur mais je ne vois pas pourquoi
 

Code :
  1. class T
  2. {
  3. public:
  4.   virtual ~T();
  5.   virtual void foo() = 0;
  6. };
  7. class S : public T
  8. {
  9. public:
  10.   virtual void foo();
  11. private :
  12.    int n;
  13. };
  14. T::~T()
  15. {
  16.   foo(); //<-- Le problème est ici (" error: abstract virtual `virtual void T::foo()' called from destructor" )
  17. }
  18. void S::foo()
  19. {
  20.     cout << n; //<= appelé depuis T::~T(), n n'existe déjà plus
  21. }



 
tu vois que ça ne peut pas marcher


Message édité par jesus_christ le 10-10-2006 à 20:51:39
Reply

Marsh Posté le 11-10-2006 à 00:16:48    

Ok, merci. C'est ce que je pensais un peu mais je n'en étais pas bien sûr


---------------
Carte des stations Vélib
Reply

Marsh Posté le 13-10-2006 à 13:52:58    

cours de christian casteyde exemple 8-11
dans l'ordre
constructeur:
Exécution du constructeur de la classe mère.
Exécution du constructeur de la classe fille.
destructeur:
Exécution du destructeur de la classe fille.
Exécution du destructeur de la classe mère.


Message édité par neg'gwada le 13-10-2006 à 13:54:23

---------------
--- WinSplit Revolution ---
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed