C++对象如何知道它的成员函数定义存在于何处?我很困惑,因为Object本身不包含函数指针.
sizeof在对象上证明了这一点.那么Runtime环境如何完成函数映射的对象呢?哪个类的成员函数指针表保持不变?
Oli*_*rth 10
如果你正在调用非虚函数,则不需要函数指针表; 编译器可以在编译时解析函数地址.所以:
A a;
a.func();
Run Code Online (Sandbox Code Playgroud)
转换为以下内容:
A a;
A_func(&a);
Run Code Online (Sandbox Code Playgroud)
通过基类指针调用虚函数通常使用vtable.所以:
A *p_a = new B();
p_a->func();
Run Code Online (Sandbox Code Playgroud)
转换为以下内容:
A *p_a = new B();
p_a->p_vtbl->func(p_a);
Run Code Online (Sandbox Code Playgroud)
其中p_vtbl是一个编译器实现的指针,指向特定于实际类的vtable *p_a.
| 归档时间: |
|
| 查看次数: |
335 次 |
| 最近记录: |