"Sokkal inkább az automatikus memóriakezelés hiánya"
Ez igaz, de sokkal egyszerűbb példával is el lehet indulni, mondjuk hozzáfűzés egy stringhez (append). Mezei C-ben strlen-nel megnézed mind a 2 string hosszát, realloc-olod az elsőt és memcpy-zod a másodikat. Ez szép meg jó, de a jobb teljesítmény miatt nem jó mindig megkeresni a lezáró nullát. Így létrehozol egy struktúrát, ami a hosszt és a char*-ot is tartalmazza, és hozzá készítesz függvényeket, hogy csak egyszer kelljen megírni őket. Jobb helyeken egységbe zárják ezeket, osztályba és dobnak hozzá operátorokat a kényelmesebb használat miatt. Már ez is megmutatja, hogy alap string kezelésre nem való a C.
A következő lépés persze az, hogy stacken hozd létre a string változódat (példányodat) és biztosítsd, hogy használat után a scope (pl. függvény) ilyen-olyan elhagyásakor fel is szabaduljon. C-ben esetleg több helyen is meg kell hívni a felszabadító függvényt, C++-ban meg ott a destructor.
Ezek nem létező problémák C++ programozóknak, mezei C programozóknak komoly technikai gondok. Ráadásul a C itt semmiféle teljesítménybeli előnyhöz nem juttat, csupán kézzel írod meg pontosan azt, amit a C++ fordító megtesz helyetted.
"header fájlok"
Erről jut eszembe: http://www.objectmentor.com/resources/articles/dip.pdf 8. oldal.