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

来源:计算机等级考试    发布时间:2012-08-28    计算机等级考试视频    评论

  虽然析构函数不是类的函数,但是我们还是有办法获得其地址的。
  #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);
  }

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答