1. 程式人生 > >C++中new和delete的背後

C++中new和delete的背後

NewTest!wmain: 00aa1020 56              push    esi 00aa1021 6a04            push    4  00aa1023 e8b4030000      call    NewTest!operator new (00aa13dc) //呼叫operator new分配大小為4位元組的空間 00aa1028 83c404          add     esp,4 00aa102b 85c0            test    eax,eax 00aa102d 740a            je      NewTest!wmain+0x19 (00aa1039) 00aa102f c7005421aa00    mov     dword ptr [eax],offset NewTest!B::`vftable' (00aa2154) //將虛表地址寫入物件地址的頭4個位元組(虛表指標) 00aa1035 8bf0            mov     esi,eax 00aa1037 eb02            jmp     NewTest!wmain+0x1b (00aa103b) 00aa1039 33f6            xor     esi,esi 00aa103b 8b06            mov     eax,dword ptr [esi] 00aa103d 8b10            mov     edx,dword ptr [eax] 00aa103f 8bce            mov     ecx,esi 00aa1041 ffd2            call    edx //呼叫虛表內的第一個函式print 00aa1043 8b06            mov     eax,dword ptr [esi] 00aa1045 8b5004          mov     edx,dword ptr [eax+4] 00aa1048 6a01            push    1 00aa104a 8bce            mov     ecx,esi 00aa104c ffd2            call    edx //呼叫虛表內的第二個函式(解構函式) 00aa104e 33c0            xor     eax,eax 00aa1050 5e              pop     esi 00aa1051 c3              ret 00aa1052 cc              int     3