Alternatively, you could create a setNextState method which does not replace the current state, but stores the next state in a second pointer. After doSomething returns, you can check if nextState!=NULL and replace the current state.
Or you could use singletons for the various states (think enum, but with methods). Then you can use plain pointers and don't have to worry about destroying anything. The manager can be passed as a parameter if necessary. That won't work if your state objects need to store additional, uh, state.
Or you could store the state as a pointer to a member function of the manager class (i.e. like a virtual method call, but without all those classes). That won't work if you need more than one method, though.