__declspec(novtable)

Posted redips-l

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了__declspec(novtable)相关的知识,希望对你有一定的参考价值。

__declspec(novtable) 的作用是:类不要有虚函数表以及对虚函数表的初始化代码, 这样可以节省运行时间和空间。缺点是该类型对象不能调用虚函数了,一般用于接口。

 

如下代码:

class Base1 {
public:
	virtual void f() {};
	virtual void g() {};
};

class __declspec(novtable) Base2 {
public: virtual void f() {}; virtual void g() {}; }; class Derived : public Base1, public Base2 {
public: virtual void g() {}; virtual void h() {}; }; int main() { Base1 b1; Base2 b2; Derived d1; return 0; }

 技术图片

 

可以看到,1. Base2没有虚表。 2. Derived有两张虚表

以上是关于__declspec(novtable)的主要内容,如果未能解决你的问题,请参考以下文章

c++新特性11 (10)shared_ptr二”_Ref_count_base类“

__declspec(dllexport)

__declspec(dllexport) 静态链接库到 dll

使用可见性属性(没有 __declspec(dllexport))时,Clang 可以生成导入库吗?

__declspec(dllexport) 和 __declspec(dllimport)的区别

转载 __declspec(dllexport) 和__declspec(dllimport)