__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的更多相关文章

  1. STDMETHOD_,STDMETHOD,__declspec(novtable)和__declspec(selectany)

    1.STDMETHOD_(ULONG, AddRef)() PURE; STDMETHOD_:定义一个返回指定类型的虚方法, STDMETHOD:定义一个返回HRESULT类型的虚方法, PURE : ...

  2. c++ 中__declspec 的用法

    __declspec ( extended-decl-modifier-seq )扩展修饰符:1:align(#)    用__declspec(align(#))精确控制用户自定数据的对齐方式 ,# ...

  3. __declspec关键字详细用法

    __declspec关键字详细用法 __declspec用于指定所给定类型的实例的与Microsoft相关的存储方式.其它的有关存储方式的修饰符如static与extern等是C和C++语言的ANSI ...

  4. Dll学习(二)__declspec用法详解

    __declspec用于指定所给定类型的实例的与Microsoft相关的存储方式.其它的有关存储方式的修饰符如static与extern等是C和 C++语言的ANSI规范,而__declspec是一种 ...

  5. c++中__declspec用法总结

    “__declspec”是Microsoft c++中专用的关键字,它配合着一些属性可以对标准C++进行扩充.这些属性有:align.allocate.deprecated. dllexport.dl ...

  6. c++ __declspec关键字详细用法

    c++ __declspec关键字详细用法 __declspec用于指定所给定类型的实例的与Microsoft相关的存储方式.其它的有关存储方式的修饰符如static与extern等是C和C++语言的 ...

  7. __declspec的用法

    __declspec用于指定所给定类型的实例与Microsoft相关的存储方式.其它的有关存储方式的修饰符如static与extern等是C和C++语言的ANSI规范,而__declspec是一种扩展 ...

  8. __declspec的15种用法

    __cdecl和__stdcall都是函数调用规范(还有一个__fastcall),规定了参数出入栈的顺序和方法,如果只用VC编程的话可以不用关心,但是要在C++和Pascal等其他语言通信的时候就要 ...

  9. 理解 __declspec

    “__declspec”是Microsoft c++中专用的关键字,它配合着一些属性可以对标准C++进行扩充.这些属性有:align.allocate.deprecated. dllexport.dl ...

随机推荐

  1. boostrap-非常好用但是容易让人忽略的地方------Font Awesome

    font-awesome基本用法 官方代码传送门 font-awesome在bootstrap中的特殊用法(这个才是重点) 要点归纳1(官方) 官方代码传送门 要点归纳2(我的) <a href ...

  2. leetcode第一刷_Length of Last Word

    不是非常明确出题人的意图,事实上这道题用java的话简直是太简单了,用split处理一下,得到全部单词的一个数组,然后求最后一个的长度即可了.我个人认为java里最成功的函数就是split了,我做pr ...

  3. MVC中下拉框显示枚举项

    原文:MVC中下拉框显示枚举项 本篇将通过3种方式,把枚举项上的自定义属性填充到下拉框: 1.通过控制器返回List<SelectListItem>类型给前台视图 2.通过为枚举类型属性打 ...

  4. 安装程序添加iis的方法经验分享

    原文:安装程序添加iis的方法经验分享 网上有一些这样的方法,但我这里主要做一些对比和扩充 网上这方面的文章的岁数比较大,server 08R2和win7出来后,整理这方面的资料的文章没找到,所以这里 ...

  5. 单节点伪分布式Hadoop配置

    本文所用软件版本: VMware-workstation-full-11.1.0 jdk-6u45-linux-i586.bin ubuntukylin-14.04-desktop-i386.iso ...

  6. jsp跳转后台代码页的简易方式~

    jsp跳转到代码隐藏页.有几种方法,例如,: action方式: jquery方式,码如下面: function regCust(){         $('#containerFRM').form( ...

  7. java缓存技术(转)

    最近在做java缓存,了解了一下.以下仅是对map对方式讨论.没有对点阵图阵讨论.作缓存要做以下2点: 1:清理及更新缓存时机的处理:   . 虚拟机内存不足,清理缓存   .. 缓存时间超时,或访问 ...

  8. Xcode HeaderDoc 过程(1)

    原版的: http://www.raywenderlich.com/66395/documenting-in-xcode-with-headerdoc-tutorial 了解如何从代码中生成文档! X ...

  9. 绑定枚举到dropdownlist

    pageTools.BindEnumToDropdownList(typeof(enumDealerArea), ddlBmwArea, new ListItem("--请选择--" ...

  10. WebApi路由及版本控制

    public class WebApiControllerSelector : IHttpControllerSelector { private const string NamespaceKey ...