__declspec(novtable)keyword

__declspec  ( novtable  )keyword,表示这个类不生成虚函数表。可是继承类不影响(无论基类是否使用了keyword)。
不使用此keyword。类在生成对象时构造函数和析构函数多要对这个虚函数表进行处理。
使用此keyword就相对省空间,少处理一些代码。


class  Base1
{
    virtual void f(){}
    virtual void g(){}
};
class    __declspec ( novtable  Base2
{
    virtual void f(){}
    virtual void g(){}
            void k(){}  //非虚函数
};

class     Derived : public Base1, public Base2
{
    virtual void f(){}
    virtual void h(){}
};
Base1 base1;
Base2 base2;
例如以下调试:

base1 中有虚函数表,base2中无虚函数表.
Base2 *pB2= &base2;
base2.g(); //成功
pB2->g(); // 指针通过虚函数表来訪问。訪问异常
pB2->k(); //成功调用非虚函数

Derived d;
第一个虚表地址: Derived ::f() Base1::g()  Derived ::h()
第二个虚表地址:Derived::f() Base::g()

在继承类中,同名虚函数覆盖。并合并到第一张虚函数表中。

基类使用或者不使用keyword【

__declspec  ( novtable  )】,继承类生成的虚表多是一样的。



写本文前阅读參考了下面文章:



版权声明:本文博客原创文章,博客,未经同意,不得转载。

转载于:https://www.cnblogs.com/mengfanrong/p/4634917.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值