You cannot assume anything about the sizes of anything other than charor unsigned char. If you are building on a 64-bit platform, there intare likely to be 4 more bytes, but the size of the virtual table pointer will probably be 8, and an additional 4 bytes to fill in (so the pointer is aligned to 8 bytes).
64 bit
+----+----+----+----+
| vp | vp | x_ | p |
+----+----+----+----+
vp - virtual table pointer
x_ - member
p - padding byte
32 bit
+----+----+
| vp | x_ |
+----+----+
vp - virtual table pointer
x_ - member
p - padding byte
Padding not required because the pointer is already aligned
As a test, you can try
class PlainOldClass {
private:
int* x_;
};
and its size will be 8.