0001-虚函数和虚表笔记
目录
- 一个空对象至少占用1字节的空间
展开查看:原因是在栈上分配2个对象时,要区分地址
class Object { }; void Function () { Object o1, o2; // 需要区分o1,o2的地址 }
- 空类有虚函数,需要占用一个指针的空间,即:编译器会插入一个
虚函数表指针vptr
- 有虚函数指针,就意味着有虚函数表
编译期时,编译器会把虚表指针赋值,安插在类中,Object::vptr=&Object::vftable
这个过程是背着程序员进行的
编译器充当地址管理器的角色
多继承下的虚表
-
虚函数表会被编译进可执行文件.o或动态库.so中,运行时会被加载到内存页中
-
虚函数运行时查虚函数表,找到函数地址再执行(多一层寻址,性能差些)

浙公网安备 33010602011771号