First of all, you need to consider the scope of functions. When a function is executed, most of the things defined inside the funciton's body lives until the function ends. Most variables are stored in the stack unless you allocate them in heap memory (with any method). The stack memory is freed when the function ends, the heap don't.
On the other hand, you need to understand that a pointer and the object it points probably live in different memory (the pointer in the stack, the pointed object in the heap). The pointer is a value, the memory address of the allocated object. That value (the address) is lost when the function ends, that's why you need to free the memory before finishing the function, or you need to return the address, otherwise you'll lose all references to that object.
In case you return the address, you're returning the value, not the variable itself (remember, the "current" variable will dissapear). This is the same that happens if you return an int for example, you may store the int temporarily in an internal function variable, but when you return it, you're actually returning the value, not the variable.
If you declare the pointer but don't create a new instance of the class (i.e. "= NULL;" like you wrote), there's no memory to free, the pointer itself is in the stack so the few bytes of memory it took are managed by the system.
Also, you should look at the smart pointers BitMaster named, they'll help you with this stuff and make things more explicit.