虚函数是我们在C++开发中最基本的多态中 常用的东西那么对于以下代码看看是否有哪些问题呢?
class Base {
public:virtual void foo() {printf("Base foo\n");}
};void overwriteVtable() {Base obj;memset(&obj, 0, sizeof(obj)); obj.foo();
}
现在大家应该明白了吧 为什么不可以使用memset,在这个内存分布中,第一个就是虚函数表指针
这个指向虚函数表也就是 指向foo() 函数的
我们把虚函数表地址清空了,fool()虚函数肯定就找不到了,从而导致崩溃现象
这个问题是高级C++简单的一个知识点,希望对大家有所帮助,其实就是理解好C++虚函数表指针,虚函数,相关概念,大脑中形成有大概的一个内存分布图,指针,成员变量,等 是如何分布的
希望对大家有所帮助!!!!