能否用指针从虚函数表中调用虚析构函数
用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;
}
下面的博主说可以调用,我试了下,还是不行的。
posted on 2019-05-05 22:48 IvanKeller 阅读(220) 评论(0) 收藏 举报
浙公网安备 33010602011771号