- Rongsen.Com.Cn 版权所有 2008-2010 京ICP备08007000号 京公海网安备11010802026356号 朝阳网安编号:110105199号
- 北京黑客防线网安工作室-黑客防线网安服务器维护基地为您提供专业的服务器维护,企业网站维护,网站维护服务
- (建议采用1024×768分辨率,以达到最佳视觉效果) Powered by 黑客防线网安 ©2009-2010 www.rongsen.com.cn
 
  
    
| 作者:黑客防线网安C/C++教程基地 来源:黑客防线网安C/C++教程基地 浏览次数:0 | 
虽然析构函数不是类的函数,但是我们还是有办法获得其地址的。。。
#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); 
} 
| 我要申请本站:N点 | 黑客防线官网 | | 
| 专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479 |