It's not unfriendly and it's not ugly. Compare it to something like this:

void ThisIsADescriptiveFunctionName();
void TIADFN();

Which name is more descriptive here?
If I see a function returning a shared pointer, I can rest assured that I won't have to do anything special with it or handle it with care.
Also, delete this only works if it was allocated with new. And new is potentially 50x or more slower than creating the object on the stack. So why use it in the first place? Let the programmer be able to choose where to create the object.
Also, auto_ptr is possibly bad in this case since it has exclusive ownership, not shared.