For arrays populated with literals, I sometime use the automatic allocation. More often I just use the allocate explicitly. A custom subroutine for allocation can be useful if you want to handle the stat and errmsg in some way.
For creating a copy of an array variable, I also like the allocate(a,source=b) form, which should be the same as a = b if I am not mistaken. I recall that with older versions of gfortran you can get some spurious warning messages.