what about copy on write, shared ptr otherwise?
or is the benefit neglectable?
Well, but now you are speaking about implementations, not interface semantics...
(In fact, String is using a lot of tricks to make copies fast, it has 3 storage levels, last one is using shared reference counted pointer, copy on write implementation).