According to Fortran 95 standard, allocatable arrays/objects are deallocated automatically at subroutine exit, when they go out of scope. For the previous 5 years, it was necessary to deallocate explicitly. You are entitled to deallocate explicitly if you wish. The Fortran system is entitled also to deallocate other local variables which don't have SAVE declarations, as a C compiler would do with auto variables.
If you had SAVE variables and called multiple concurrent instances of the subroutine, you would have a storage clash, analogous to C static variables.
So I guess that in this case, as the pointer that has been allocated resides in the module rather than in the 'initialize' subroutine, it stays allocated until explicitly deallocated just like an allocatable array would if held in the module.
Presumably, the fact that 'struct' is a pointer, and there is no static variable of type(pass) defined, is the mechanism that lets the compiler avoid overwriting the same 'struct' over and over again. I haven't used pointers like this before; normally I create a bunch of allocatable arrays, and create a pointer to point at one of them. If I then try to allocate an array that has already been allocated, I get an 'already allocated' error message. The concept of being able to allocate multiple structures with the same name but different pointers is unfamiliar, but I can see its very powerful.
Stephen.