I think this is rather a general C++ question. Once you create an object all members are initialized by invoking a constructor. If you do not declare any constructor the compiler will silently generate a set of constructors. The default constructor that takes no arguments is one of them. This will initialize all members in the order they are given. If you have a member of a primitive type like double or int memory for an int or double will be reserved (but not initialized with a value yet). If you have a class member it also needs to be initialized somehow so the compiler will look for a default constructor.
What happens in your example is that the triangulation actually does get initialized by invoking its default constructor which initializes an empty triangulation. The dof_handler then can be called with the triangulation as an argument to store a (smart) pointer to the triangulation.
See this documentation for example:
It is often good to know what the C++ compiler (secretly) does without explicitly telling you and what functions it generates if you do not provide them explicitly (and when you must do so). I really recommend the book by Scott Meyers "Effective C++: 55 ways ..."
Hope that helps.
Best,
Konrad