If we have this class:
class NotAggregate
{
double foo;
int bar;
};
The size is 16 bytes because 4 bytes of padding are required to have correct alignment.
If we inherit from this class
struct NotAggregateChild : public NotAggregate
{
int baz;
};
The sizeof(NotAggregateChild)
is still 16
, because the compiler is able to use the padding from the parent for the baz member.
However, if NotAggregate was an Aggregate (i.e. we add public: or change to a struct), the sizeof
the child changes to 24
.
I'm assuming this has to do with optimisations in copying aggregates (i.e. it's likely just a memcpy on the full type, which would end up overwriting child members). But that is just a guess.
Can anyone tell me what the actual reason for this optimisation being disallowed is?
https://godbolt.org/z/8jMfnnEvW
Aucun commentaire:
Enregistrer un commentaire