??????c++???????????????????锌???????????????????????????????????????????????????????????????????

??????????????????X????????????????蹇�??????????c++??????锟�?

class X {
private:
    int i;
    int j;
};

int main() {
    X x1;//????????x1
    X x2 = x1;//??x1??????x2
}

?????????????????

_main    PROC

; 7    : int main() {

    push    ebp
    mov    ebp?? esp
    sub    esp?? 16                    ; ?????x1??x2???16byte??????

; 8    :     X x1;//????????x1
; 9    :     X x2 = x1;//??x1??????x2

    mov    eax?? DWORD PTR _x1$[ebp];??x1?????????????????????eax?????x1?械???????i?????eax
    mov    DWORD PTR _x2$[ebp]?? eax;??eax??????写??x2????????????eax??????写??x2????????i
    mov    ecx?? DWORD PTR _x1$[ebp+4];?????x1????4byte??????????????????eax??????x1?械???????j?????ecx
    mov    DWORD PTR _x2$[ebp+4]?? ecx;??ecx??????写?????x2????4byte????????妫�????ecx??????写??x2????????j

; 10   : }

    xor    eax?? eax
    mov    esp?? ebp
    pop    ebp
    ret    0
_main    ENDP

?????????????????????????????泻?????????????械?????????????????????????????????伞?????????????????????????????????????????????????????????????????????

?????????????????????????????????????????????????????????

????????????????????X???婧�????????????

????c++???

class X {
private:
    int i;
    int j;
public:
    virtual ~X() {}//??????????
};

int main() {
    X x1;//????????x1
    X x2 = x1;//??x1??????x2
}

???????????????????????????????????????main???????????????????

????????????????main??????????

_main    PROC

; 9    : int main() {

    push    ebp
    mov    ebp?? esp
    sub    esp?? 24                    ; ???????????楹�??????????????????12byte ???????i??j8byte vptr???4byte ????????x1 x2???24byte

; 10   :     X x1;//????????x1

    lea    ecx?? DWORD PTR _x1$[ebp];???x1????????????ecx??????霉????????????????????this
    call    ??0X@@QAE@XZ;???霉?????

; 11   :     X x2 = x1;//??x1??????x2

    lea    eax?? DWORD PTR _x1$[ebp];???x1????????????????eax
    push    eax;??eax??????????????????????
    lea    ecx?? DWORD PTR _x2$[ebp];???x2????????????????ecx?????????????????????????????????this
    call    ??0X@@QAE@ABV0@@Z;?????????????

; 12   : }

    lea    ecx?? DWORD PTR _x2$[ebp];???x2????????????ecx??????????????????????????????????????this
    call    ??1X@@UAE@XZ                ; ????????????
    lea    ecx?? DWORD PTR _x1$[ebp];???x1????????????ecx??????????????????????????????????????this
                                ;????????????????????
    call    ??1X@@UAE@XZ                ; ????????????
    xor    eax?? eax
    mov    esp?? ebp
    pop    ebp
    ret    0
_main    ENDP