When properly used, std::string has no more overhead than doing the allocations and concatenations by hand.
The most common situation of not using std::string properly is this: s=s+list+of+strings;
instead of
I think the problem here is that there's someone using C++ to teach programming. If this was Pascal, I'd agree that there's a point in teaching string concatenation by hand, but in C++ it just doesn't make sense. You're just adding more places where you can screw up, and, even worse, it has a chance of creating bad habits.