With the union, you still have to know which one is "in use." So you'd still need that union within a struct, which has another member telling which one is in use.
And the union solution only works if you're using a char*. If you're using a string object (Standard or otherwise), it won't.