返回信息流看c++的虚函数表时,有个地方不明白,虚函数表存放的都是虚函数的地址么?实例的非虚函数的地址又存放在哪里呢?
这是一条镜像帖。来源:北邮人论坛 / cpp / #79133同步于 2014/5/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
虚函数表求问
ylewxh
2014/5/5镜像同步31 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
nonstatic data menbers被配置于每一个class object之内
static data menbers则被存放在所有的class object之外
static 和 nonstatic function menbers 也被放在所有的class object之外 // inline就地展开,属于``class object之外``的范畴
virtual functoins 使用两种方法来实现
每一个class生成一堆指向virtual funtion的指针,放在表格(virtual table)之中
每一个class都包含一个指向virtual table的指针(vptr),vptr的设定与重置都由每一个class的构造、析构与拷贝构造函数来自动完成
每一个class所关联的type_info object(用以Runtime Type Identification, RTTI),也经由virtual table指定,通常放在virtual table的第一个slot处
+1
【 在 Wizmann 的大作中提到: 】
: nonstatic data menbers被配置于每一个class object之内
: static data menbers则被存放在所有的class object之外
: static 和 nonstatic function menbers 也被放在所有的class object之外 // inline就地展开,属于``class object之外``的范畴
: ...................
【 在 tinyXML 的大作中提到: 】
: http://blog.csdn.net/haoel/article/details/1948051/
之前就是看陈浩大神的这篇blog来学习的,不过里头没讲非虚函数怎么处理
【 在 Wizmann 的大作中提到: 】
: nonstatic data menbers被配置于每一个class object之内
: static data menbers则被存放在所有的class object之外
: static 和 nonstatic function menbers 也被放在所有的class object之外 // inline就地展开,属于``class object之外``的范畴
: ...................
多谢大神,这下明白啦
【 在 gaoweiwei 的大作中提到: 】
: 不管有没有实例,虚函数表都存在,可以认为是静态成员。他放在只读内存.rdata段里。
我定义了一个类的两个实例a和b,发现a和b的虚函数表的地址不一样,这样就不能看成静态成员了吧?