编译以下类
class Interface
{
virtual void doIt() = 0;
virtual ~Interface() = 0;
};
inline Interface::~Interface() {}
Run Code Online (Sandbox Code Playgroud)
使用gcc -fdump-class-hierarchy.
gcc 发射
Class Interface
size=4 align=4
base size=4 base align=4
Interface (0x1a779c0) 0 nearly-empty
vptr=((& Interface::_ZTV9Interface) + 8u)
"近空"有什么意义?这是什么意思?
C++有一种叫做"空基优化"的东西.如果一个类没有成员,则在将它用作基类时不需要占用空间.这很重要的一个例子是std::unary_function<T, U>.它的存在是为您提供一组简单的typedef.那些typedef不应该对functor类的大小有所贡献.
如果你有一个带有vtable指针的基类,那么这个指针很可能与派生类共享.您只需为派生类创建一个vtable,它在基类之后添加自己的方法.
您现在可以实现类似的"无额外开销"基类.显然,海湾合作委员会称之为"几乎空无一人".