Avatar billede krismort Nybegynder
27. november 2007 - 11:02 Der er 4 kommentarer og
1 løsning

pure virtual destructor ?

Hej,
Jeg har et problem med implementering af en pure virtual destructor defineret i klassen EventObserver. Her ses EventObserver klassen :

class EventObserver {
public:
  virtual ~EventObserver() = 0;
  virtual void onReady( Result* res ) = 0;
};

ApplicationObserver arver fra EventObserver :

class ApplicationObserver : public EventObserver {
public:
  virtual onReady( Result* res ) {
  } 
};

Hvordan implementeres ~EventObserver() i ApplicationObserver klassen ?

Mvh. Kristian
Avatar billede segmose Nybegynder
27. november 2007 - 11:20 #1
Det ser ikke ud til at en "pure virtual destructor" skal implementeres som forventet, derimod siger

http://www.devx.com/tips/Tip/12729

at man skal lave en tom implementation af den.

http://www.codersource.net/cpp_virtual_destructors.html
fortæller "This is where the virtual mechanism comes into our rescue. By making the Base class Destructor virtual, both the destructors will be called in order. The following is the corrected sample." som sikkert er det du vil opnå?
Avatar billede segmose Nybegynder
27. november 2007 - 11:21 #2
Du bør lige teste om din compiler har samme opfattelse af virkeligheden.
Avatar billede arne_v Ekspert
28. november 2007 - 02:39 #3
Det giver da god mening at den skal implementeres.

Den ønskede funktionalitet er jo:
  Parent *o = new Child();
  delete o;
skal først kalde Child destructor og derefter Parent destructor.

En pure virtual Parent destructor vil enten give en compile time fejl eller en runtime
fejl fordi man forsøger at kalde den.
Avatar billede krismort Nybegynder
28. november 2007 - 09:41 #4
Den giver fejl på link tidspunktet.
Avatar billede mxs Nybegynder
30. november 2007 - 22:25 #5
Du skal lave den virtual og derefter deklere den:

EventObserver::~EventObserver
{}

Nu kan du bare lave en deconstructor i ApplicationObserver:

ApplicationObserver::~ApplicationObserver()
{}

Så vil dine deconstructors blive kaldt retmæssigt.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester