C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 虚拟表的顺序是否重要?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我是新的,让我轻松:)
从我讲师在一段时间以前所说的,虚拟表的顺序很重要.
但我不明白的原因!

给定下一个代码

class A
{
public:
    A() {Cout <<"1" << endl;};
    A (const A& s) {Cout << "2" << endl;}
    ~A () {Cout << "3" << endl;}
    void f1() {Cout << "4" << endl; f2();}
    virtual void f2() = 0;
    virtual void f3() {Cout << "5" << endl;}

};


class B : public A
{
public:
    B() {Cout << "6" << endl;}
    B(const B& b) : A(b) {Cout << "7" << endl;}
    ~B() {Cout << "8" << endl;}

    virtual void f1() {Cout<<"9"<<endl;}
    void f2() {Cout<<"lO"<<endl; f4();}
    virtual void f2(int i) {Cout << "11" << endl;}
    virtual void f4() {Cout << "12" << endl; f3();}

};

他说这个命令是:

A's vtable : 
A::f2()
A::f3()

B's vtable : 
B::f2()
A::f3()
B::f1()
B::f2(int)
B::f4()

但我不明白为什么这很重要?他说,如果是这样的话,这个vtable是没用的
不是按照正确的顺序,你能解释一下为什么吗?

@L_874_2@

vtable的顺序对于正常工作来说很重要,但只对编译器(即不需要关心,因为它需要处理).

如果编译器为自己设置不合格,那么事情会中断,因为函数被偏移量调用(所以偏移量会产生一个随机函数,这将是灾难性的).但平均程序员不需要担心关于vtable的什么顺序.

大佬总结

以上是大佬教程为你收集整理的c – 虚拟表的顺序是否重要?全部内容,希望文章能够帮你解决c – 虚拟表的顺序是否重要?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。