雖然析構(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);
}
#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
exe();
}
class a{
public:
~a(){
cout<<"~a"<
};
void main()
{
void*p=Destruct();
executeDestruct(p);
}