Pochodnal ()
cout « "konstruktor klasy pochodna1\n";
—Pochodnal ()
cout « "destruktor klasy pochodna1\n";
};
void TestWirtualnyO
pd11 =new Pochodnal;
Kod maszynowy wytłuszczonego fragmentu
00413566 |
push |
0041356B |
cali |
00413570 |
add |
00413573 |
mov |
00413579 |
mov |
00413580 |
cmp |
00413587 |
je |
00413589 |
mov |
0041358F |
push |
00413590 |
mov |
00413596 |
cali |
0041359B |
mov |
004135A1 |
jmp |
004135A3 |
mov |
00413 SAD |
mov |
004135B3 |
mov |
004135B9 |
mov |
004135CO |
mov |
004135C6 |
mov |
108h
operator new(0xGQ40483O) esp,4
dword ptr [ebp-164h],eax
dword ptr [ebp-4],5
dword ptr [ebp-164h],0
TestWi rtualny (0x004135a3)+2BFh
eax,dword ptr [pd11]
eax
ecx,dword ptr [ebp~164h]
@ ILT+25 (? ?0Pocho dna1 @@QAE@AAV0@@Z) (0x00401019)
dword ptr [ebp-188h],eax
T estWi rtualny (0x004135ad)+2C9h
dword ptr [ebp-188h],0
ecx,dword ptr [ebp-188h]
dword ptr [ebp~168h],ecx
dword ptr [ebp-4],0FFFFFFFFh
edx,dword ptr [ebp-168h]
dword ptr [pd12],edx
Pojedyncza instrukcja new wygląda dość niewinnie. Ale zauważmy, jak wiele generuje kodu maszynowego. Nawet jeśli ominiemy konstruktory i destruktory klasy, to są one generowane automatycznie.
Przykład: TestVirtualDTorQ w pliku inherit.cpp