Hirdetés

Keresés

Új hozzászólás Aktív témák

  • jattila48

    aktív tag

    válasz jattila48 #3182 üzenetére

    Úgy néz ki, megoldódott a probléma. Ha az mfp member function pointert const-nak deklarálom, úgy jól működik. handle_class.h-ban:
    int (BodyClass::* const mfp)(int);
    handle_class.cpp-ben:
    int (BodyClass::* const HandleClass::mfp)(int)=&BodyClass::f;
    pimpl_proba.cpp-ben visszaírtam egy utasításba a debug miatt több sorra szedett hívást:
    BodyClass *pimpl=hc.pimpl;
    n=(pimpl->*hc.mfp)(2);

    Szerintem const nélkül is jól kéne működnie, úgyhogy a VS-ben lehet hiba. Továbbra sem értem azonban, hogy mi az a "fölöslegesnek" tűnő kód, amit a hívás előtt generál (ez volt hibás ha nem const volt az mfp):
    004116D6 cmp dword ptr ds:[4168B4h],0
    004116DD jne main+80h (04116F0h)
    004116DF mov eax,dword ptr [pimpl]
    004116E2 add eax,dword ptr ds:[4168ACh]
    004116E8 mov dword ptr [ebp-100h],eax
    004116EE jmp main+0A9h (0411719h)
    004116F0 mov ecx,dword ptr [pimpl]
    004116F3 add ecx,dword ptr ds:[4168B0h]
    004116F9 mov edx,dword ptr [pimpl]
    004116FC add edx,dword ptr ds:[4168B0h]
    00411702 mov eax,dword ptr [edx]
    00411704 mov edx,dword ptr ds:[4168B4h]
    0041170A add ecx,dword ptr [eax+edx]
    0041170D add ecx,dword ptr ds:[4168ACh]
    00411713 mov dword ptr [ebp-100h],ecx
    00411719 mov esi,esp
    0041171B push 2
    0041171D mov ecx,dword ptr [ebp-100h]
    00411723 call dword ptr ds:[4168A8h]

    A pimpl-et igazgatja, de nem tudom miért. Másik programomban ez nincs. Valami hasonlót a gcc is csinál. Szerintetek mi lehet ez?

Új hozzászólás Aktív témák