Lassen Sie mich diesen Haftungsausschluss machen: Ich habe ein klares Verständnis für den Aufruf virtueller Funktionen im Konstruktor oder Destruktor.
In dem untenstehenden Code versuche ich aus experimentellen Gründen, einen virtuellen Destruktor zu vermeiden.
Jetzt ist meine Frage:
In der main-Funktion ruft der Aufruf der Destroy-Funktion die richtige virtuelle Funktion auf. Ich erwarte, dass jeder Aufruf der Destroy-Funktion die richtige virtuelle Funktion aufruft.
Aber dieselbe Destroy-Funktion im Basiskonstruktor ruft die basierte virtuelle Funktion auf.
Hängt das mit statischer Bindung oder Compiler-Optimierung zusammen?
class Base
{
public:
Base()
{
}
void Destroy()
{
callVirtual();
}
virtual void callVirtual()
{
cout<<"In Base callVirtual "<
``.
class Derived : public Base
{
public:
Derived()
{
}
void callVirtual()
{
cout"<
`.
int main()
{
Base *pointer = new Derived();
pointer->Destroy(); // Ruft die richtige callVirtual-Funktion auf
return 0;
}` ``