獲得類析構(gòu)函數(shù)地址并執(zhí)行析構(gòu)函數(shù)

字號(hào):

雖然析構(gòu)函數(shù)不是類的函數(shù),但是我們還是有辦法獲得其地址的。
    #include
    using namespace std;
    template
    static void* Destruct()//得到T析構(gòu)函數(shù)的地址并返回
    {
    T *p;
    goto getDesAddr;
    desAddr:
    p->~T();
    #ifdef _WIN32 //_MSC_VER //intel格式匯編,windows 平臺(tái)
    #ifdef _MSC_VER
    __asm{
    ret
    getDesAddr:
    push eax
    mov eax,desAddr //save the address of T::~T()
    mov p,eax
    pop eax
    }
    #endif
    #endif
    return (p);
    }
    typedef void(*Fndes)();
    static void executeDestruct(void *addr)//執(zhí)行addr指向的析構(gòu)函數(shù)
    {
    Fndes exe=reinterpret_cast(addr);
    exe();
    }
    class a{
    public:
    ~a(){
    cout<<"~a"<    }
    };
    void main()
    {
    void*p=Destruct();
    executeDestruct(p);
    }