C vs.C++ is a flame war I try to keep out of... but the idea that C++ makes C obsolete is nonsense. In my experience a modern C program executes faster than a modern C++ program, due to the extra scaffolding of the latter. C is also probably easier for compilers to optimise---reasoning a reference count is useless might require global analysis.
Sane use of char * can be *much* faster than std::string if you want to transform a string in in way not built into std::string without preserving the original. This was 30%+ of a real program until I aggressively optimised in a way impossible with std::string and reduced it to under 1%.
The more extreme OO people claim OO makes all other styles of programming obsolete and some even think program should be modelled as communicating concurrent objects. The later is completely stupid: this mathematically much harder to analyse than sequential programs.
When the OO people claim I should use objects like sets, queues, lists, maps, etc to simplify programming I agree. When they say how these are implemented does not matter I part company: once I know what operations are important that is a good clue about the right implementation technique.
I not infrequently end up wanting an extended type, for example a tree with subtree size information, or a fast version of a specialised operation. If you can't use a low level language and have a requirement like this then you lose completely when this happens.
When speed is not critical and a high level language is a big win I often use it. A lot of my time is spent writing python code which makes extensive use of dictionaries. The same program in C or C++ would be unlikely to use dictionaries.