if any newly stored pointer values in *this point at objects stored outside
the object rhs and those objects are destroyed when rhs is destroyed, the
newly stored pointer values are altered to point at newly constructed copies of the
Effects: The states of *this and rhs
are exchanged, except that rdbuf() returns the same
value as it returned before the function call, and rhs.rdbuf()
returns the same value as it returned before the function call.