Padding/Memory alignment optimizes things a bit. It's quicker to read from word sized chunks than it is from something that isn't a multiple of a word.
Wikipedia has a pretty decent article on it:
http://en.wikipedia.org/wiki/Data_structure_alignment
The struct above
does have a constructor - just you haven't written it so it uses a default constructor and the variables will be uninitialised.
It is not the constructor's responsibility to allocate memory for the class. They're more for initialising values or allocating
dynamic memory should any of your members require it.
I think by "implicit" you mean
default. All constructors, by their very nature, are implicit in that they're called automatically upon the objects creation. If you override the default constructor (i.e. the one with no parameters) then your implementation is called when the object is created.
Similarly, if you implement a constructor that takes parameters, that will be called should you create the object with the appropriate arguments.
Don't be fooled into thinking there's a great deal of difference between classes and structs. In C++ they're exactly the same other than the access level - structs, by default, are public whereas classes are private.