new Player()
is an expression that creates an object (unnamed) on the so-called heap. The result of the expression is a pointer to the newly created object. Now when you do
Player player = *(new Player())
you define a variable named player that is a copy of the newly created object. Moreover, you've lost all handles (access) to the heap object, and you can never free the memory it occupies.
On the other hand,
Player &player=*(new Player());
creates a reference named player to the newly created object. Thus, you have access to that object. In particular, you can free the memory and destroy that object by
delete &player;