我发现__declspec(novtable)并没有减小对象的大小.
MSDN上面说__declspec(novtable)使得编译器不会为这个类产生虚表,也就不会给类对象的头部放一个虚表指针.
我做了一个小实验:
class __declspec(novtable)Base
{
int i;
public:
virtual void f();
virtual void g();
};
class __declspec(novtable)Child:public Base
{
public:
void f(){}
};
class C:public Child
{
};
int _tmain(int argc, _TCHAR* argv[])
{
printf("%d,%d,%d\n",sizeof(Base),sizeof(Child),sizeof(C));
return 0;
}
在32位系统上,我期待的输出是4,4,8。但是实际输出的是8,8,8.
看起来对象的虚表指针还是生成了啊。我用VS2012编译的Debug/Release版结果都是这样的。
究竟是为什么呢?
[解决办法]
看看msdn吧,http://msdn.microsoft.com/en-us/library/k13k85ky.aspx,不要光看字面意思。