C++虚函数的内存管理
来源:互联网 发布:阿里云备案网站名称 编辑:程序博客网 时间:2024/06/11 17:37
这几天在复习多态性和动态绑定,看到一篇不错的博文:
https://blog.twofei.com/496/
这里记录一下。
动态绑定实现关键就在于C++的虚函数,虚函数的内存管理由虚函数表实现,下面几张摘自博文的图很好地说明了虚函数的内存:
1、当子类没有虚函数时,直接采用父类虚函数表(虚函数表由指针vfptr指向),如果有虚函数,同名的会覆盖,不同名的接在后面[0][1]的后面。
2、如果多个父类都有虚函数,那么子类自己的虚函数接到第一个有虚函数的父类虚函数表中。
3、如果两个父类都没虚函数,则子函数自有的vfptr会放在最前面,类似地,如果base2有虚函数,那么内存排列时,base2会在base1前面(默认是按照声明顺序,但有虚函数表的优先)。
有了这些概念,关于子类各个函数调用就很容易理解了:
1、如果不是虚函数, 直接调用指针对应的基本类的那个函数
2、如果是虚函数, 则查找虚函数表, 并进行后续的调用. 虚函数表在定义一个时, 编译器就为我们创建好了的. 所有的,同一个类, 共用同一份虚函数表.
阅读全文
0 0
- C内存管理函数
- C内存管理函数
- C内存管理函数
- 一组新的C内存管理函数
- Turbo C使用的汇编函数 -- XMS内存管理函数
- C语言内存管理函数
- C语言内存管理函数
- C语言内存管理函数
- C内存管理相关函数
- C语言内存管理函数
- c 的内存管理
- C的内存管理
- BORLAND C++BUILDER VCL的内存管理函数
- C语言内存管理的几个函数介绍与区别
- C语言 内存管理--指针的函数传递
- C++虚函数的内存管理
- C的内存函数
- ANSI C内存管理API函数
- leetcode:Permutations1+2 + Rotat…
- 用已有的caffemodel和python脚本进…
- leetcode:Pow(x, n) + N-Quee…
- linux中$* $@ 以及各自…
- leetcode:Simplify Path+Edit…
- C++虚函数的内存管理
- visual studio无法查看局部变…
- 将博客搬至CSDN
- 着色语言 Shading Language(二)
- 404页面怎么做?
- 移动商城第五篇【查看、删除、编辑品牌】
- PAT-1056 Mice and Rice (分组决胜问题)
- Java并发编程:(2)线程状态和Thread类详解
- Hello World 及IDE的使用