Andrei Alexandrescu, C++ programmer extraordinaire who wrote “Modern C++ Design” once wrote a great article about building different string implementations with customizable storage systems. His article (linked here) describes how you can do what you’ve described above as a special case of a much more general system that can handle all sorts of clever memory allocation requirements. This doesn’t talk so much about std::string and focuses more on a completely customized string class, but you might want to look into it as there are some real gems in the implementation.