前言
遇到一个版本兼容性的问题,A使用新的头文件,B使用了旧的头文件,B负责实现接口,问题就是A调用API时直接崩溃,因为B未对调用API进行实现。
一、虚函数
- 虚函数对象包含一个虚函数表的
- 虚函数表的地址就是对象地址的第一个偏移量,32位机器上就是4个字节
- 虚函数表的地址的第一个偏移量就是第一个虚函数的地址(顺序对照头文件中API的顺序),然后以此类推
- 如果某个API未实现,那么虚函数的地址为 0xffffffff,也就是-1,通过这个特性可以规避崩溃问题
二、代码验证
// MyClass.h
struct
// MyClass.cpp
#include
// main.cpp
#include