( utpKabel | 2013. 02. 18., h – 15:02 )

1. Ahogy mondtam, a balfasz programozónak se C, se C++ nem való.

2. Az a baj, hogy nincs ingyen, és a legtöbb ilyen megoldás még csak nem is teljes. A C++ által C-hez hozzáadott feature-ök többsége csak az esetek többségében véd, a hézagok viszont olyan bonyolult esetekben jönnek elő, amikor a bonyolultság miatt a javítás költsége már sokszorosa az egyszerű C-s hiba javítási költségének.

Példák:
- Type safety nem garantálható memory safety nélkül. A C++ típusellenőrzése bizonyos hibákat kiszűr, de mivel nyersen hozzáférsz a memóriához, ezért tulajdonképpen semmi garancia nincs. Sőt, direkt eszközöket kapsz ahhoz, hogy a típusrendszert megkerüld (const_cast, reinterpret_cast).
- Konstruktor. Elvileg arra jó, hogy ne lehessen egy objektumot használni az inicializálása előtt. Ha nagyon vágod a C++-t, biztos tudsz olyan példát mutatni, ahol egy objektumot naivan használsz az inicializálása előtt (és valószínűleg el is száll tőle a program).
- A kivételek bizonyos esetekben hasznos feature, azonban a hozzáadása a nyelvhez nem csak hozzátesz, hanem el is vesz egyúttal. Még pedig azt, hogy ránézésre megmond a kódról, hogyan fog alakulni a vezérlés a kódban. Ez problémákat okozhat, és exception safe kód írása ugyanolyan önfegyelmet és odafigyelést igényel, mint az, hogy C-ben mindig felszabadítsa az ember az erőforrásokat.

A RAII-t hasznos feature-nek tartom, bár nekem a Go defer statementje jobban tetszik.

Az is dob egy picit a kényelmen, hogy a C++ maga generálja le a virtuálismetódus-táblákat, míg C-ben ezeket kézzel kell megírni.

Igazán a template-ek az a feature, ami bizonyos esetekben nagyon hasznos tud lenni, és C-ben nem igazán oldható meg jól.