To pytanie może brzmieć zbyt głupio, jednak nie znajduję konkretnej odpowiedzi gdziekolwiek indziej.Kto nazywa Destruktor klasy, gdy operator delete jest używany w dziedziczeniu wielokrotnym
Przy niewielkiej wiedzy na temat skuteczności późnego wiązania i wirtualnego słowa kluczowego używanego w dziedziczeniu.
Podobnie jak w przykładzie kodu, w przypadku dziedziczenia, w którym do zwolnienia pamięci używany jest wskaźnik klasy bazowej wskazujący obiekt klasy pochodnej utworzony na sterowniku stosu i usunięcia, wówczas destruktor zbioru pochodnego i podstawy będzie wywoływana w kolejności tylko wtedy, gdy destruktor podstawowy jest deklarowaną funkcją wirtualną.
Teraz moje pytanie brzmi:
1) Gdy destructor bazy nie jest wirtualny, dlaczego problem nie nazywając dtor pochodzący nastąpić tylko wtedy, gdy w przypadku użycia „usuń” operator, to dlaczego nie w przypadku, biorąc pod uwagę poniżej:
derived drvd;
base *bPtr;
bPtr = &drvd; //DTOR called in proper order when goes out of scope.
2) When "delete" operator is used, who is reponsible to call the destructor of the class? The operator delete will have an implementation to call the DTOR ? or complier writes some extra stuff ? If the operator has the implementation then how does it looks like , [I need sample code how this would have been implemented].
3) If virtual keyword is used in this example, how does operator delete now know which DTOR to call?
Fundamentaly i want to know who calls the dtor of the class when delete is used.
<h1> Sample Code </h1>
class base
{
public:
base(){
cout<<"Base CTOR called"<<endl;
}
virtual ~base(){
cout<<"Base DTOR called"<<endl;
}
};
class derived:public base
{
public:
derived(){
cout<<"Derived CTOR called"<<endl;
}
~derived(){
cout<<"Derived DTOR called"<<endl;
}
};
I'm not sure if this is a duplicate, I couldn't find in search.
int main() { base *bPtr = new derived();
delete bPtr;// only when you explicitly try to delete an object return 0;
}
Mały punkt, ale twoje pytanie mówi wiele dziedziczenia. To nie jest przykład wielokrotnego dziedziczenia, to po prostu stare dziedzictwo. – Rich