Line 3 results in a possible exception because memory is unavailable. If any exception occurs on line 4, *p will not be destroyed and the memory pointed to by p will be leaked. It's easy enough to forget line 5.
In other words, there are lots of opportunities for error to creep in. Whereas with:
1 2 3 4 5
void fct()
{
X p ;
// use p
}
many of those opportunities for error do not exist.