IvanKeller

导航

能否用指针从虚函数表中调用虚析构函数

用VS2017测试的结果是否定的。(希望有不同结果的同学能在留言处留言,先谢过~~)

#include <iostream>
using namespace std;

class Cp
{
public:
  virtual ~Cp()
  {
    cout << "Cp虚析构\n";
  }  

  virtual void show()
  {
    cout << "Cp普通虚函数\n";
  }

  
};

class CpSon : public Cp
{
public:
  virtual ~CpSon()
  {
    cout << "CpSon虚析构\n";
  }
};

int main()
{

  Cp *p1 = new CpSon;

  //using p = void(*)();
  typedef void(*p)();//给无返回值、无参数的函数指针起别名为p;  

  //((p)(*((int *)(*(int *)p1) + 0)))();//不行,调用不了虚析构函数(如果取消注释,将引发下面错误)

 

  ((p)(*((int *)(*(int *)p1) + 1)))();//可以调用普通虚函数

  delete p1;

  system("pause");
  return 0;
}

下面的博主说可以调用,我试了下,还是不行的。

https://blog.csdn.net/f_cff/article/details/79690470

posted on 2019-05-05 22:48  IvanKeller  阅读(220)  评论(0)    收藏  举报