Actually, the C++ standard string was designed to be easy to implement as a copy-on-write object. And one of the motivations for the libc++ project ( http://libcxx.llvm.org/ ) is to stop using that design (first bullet point under "Why a new C++ Standard Library for C++11?") because it's no longer the obviously best choice.