Returning by reference - System don't need to allocate & initialise any extra memory. Just have to pass the memory address of already existing location.
Returning by value - System need to allocate & initialise extra memory.
It completely depends on the requirements whether you need "by reference" or "by value".