The C++ standard guarantees that memory layouts of a C struct
and a C++ class
(or struct
— same thing) will be identical, provided that the C++ class
/struct
fits the criteria of being POD (“Plain Old Data”). So what does POD mean?
A class or struct is POD if:
- All data members are public and themselves POD or fundamental types (but not reference or pointer-to-member types), or arrays of such
- It has no user-defined constructors, assignment operators or destructors
- It has no virtual functions
- It has no base classes
About the only “C++-isms” allowed are non-virtual member functions, static members and member functions.
Since your class has both a constructor and a destructor, it is formally speaking not of POD type, so the guarantee does not hold. (Although, as others have mentioned, in practice the two layouts are likely to be identical on any compiler that you try, so long as there are no virtual functions).
See section [26.7] of the C++ FAQ Lite for more details.