Search code examples
c++classvirtualsizeofvptr

C++ Derived polymorphic class - does it contain an entire instance of Base, including a vptr?


Say we have

Class A
{
   public:
   int _i;
   virtual int getI();
};
class B : public A
{  
   public:
   int _j;
   virtual int getI();
};

So assuming that the size of a class in memory is the sum of its members (i.e. ignoring padding or whatever might actually happen), what is the size of a B instance? Is it sizeof(A) + sizeof(int) + sizeof(vptr)? Or does a B instance not hold an A vptr in it's personal A instance, so that sizeof(b) would be sizeof(int) + sizeof(int) + sizeof(vptr)?


Solution

  • It's whatever the implementation needs to make the code work. All you can say is that it is at least 2 * sizeof(int), because objects of type B contain two ints (and possibly other things). In a typical implementation, A and B will share a vptr, and the total size will be just one pointer more than the two ints (modulo padding for alignment, but on most implementations, I don't think that there will be any). But that's just a typical implementation; you can't count on it.