码迷,mamicode.com
首页 > 其他好文 > 详细

__declspec(novtable)keyword

时间:2015-07-10 10:46:35      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:

__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 )】,继承类生成的虚表多是一样的。



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



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

__declspec(novtable)keyword

标签:

原文地址:http://www.cnblogs.com/mengfanrong/p/4634917.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!