什么是"几乎空"的课程?

Tob*_*ias 2 c++ gcc abc

编译以下类

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)

"近空"有什么意义?这是什么意思?

小智 6

我想将它与"空"区分开来,如果编译一个没有成员的类,你就会得到它."几乎是空的"似乎意味着它有一个vtable而没有别的.


MSa*_*ers 6

C++有一种叫做"空基优化"的东西.如果一个类没有成员,则在将它用作基类时不需要占用空间.这很重要的一个例子是std::unary_function<T, U>.它的存在是为您提供一组简单的typedef.那些typedef不应该对functor类的大小有所贡献.

如果你有一个带有vtable指针的基类,那么这个指针很可能与派生类共享.您只需为派生类创建一个vtable,它在基类之后添加自己的方法.

您现在可以实现类似的"无额外开销"基类.显然,海湾合作委员会称之为"几乎空无一人".