当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++进阶与实例

获得类析构函数地址并执行析构函数

    虽然析构函数不是类的函数,但是我们还是有办法获得其地址的……

 #include <iostream>
using namespace std;

 

template <typename T>
static void* Destruct()//得到T析构函数的地址并返回
{
T *p;
goto getDesAddr;
desAddr:
p->~T();
#ifdef _WIN32 //_MSC_VER //intel格式汇编,windows 平台
#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)//执行addr指向的析构函数
{
Fndes exe=reinterpret_cast<Fndes>(addr);
exe();
}

class a{
public:
~a(){
cout<<"~a"<<endl;
}
};
void main()
{
void*p=Destruct<a>();
executeDestruct(p);
}

相关内容
赞助商链接