Na, itt két dolgot meg kell különböztetni egymástól:
- a garbage collector, mint az automatikus memóriakezelés eszköze.
- garbage collected programozási nyelvek (pl. Java), amelyeknek kötelező része a garbage collector és automatikus memóriakezeléssel rendelkeznek.
GC létezik C-hez és C++-hoz is, ott természetesen nem kötelező használni, sőt egyazon alkalmazás használhatja egyszerre a garbage collected heapet, az unmanaged heapet, a stack-et, és tetszőleges számú custom allokátort is. A GC csak egy memóriakezelési módszer a sok közül.
én személy szerint a GC-t leginkább értelmetlen korlátozásnak tartom
Természetesen a lehetőségeket korlátozza az, ha egy nyelv kötelezővé teszi a GC-t, és ez bizonyos alkalmazási területeknél előnytelen. A "értelmetlen" résszel viszont vitatkoznék, hiszen az automatikus memóriakezelés kötelezővé tétele lehetővé teszi a nyelvnek:
- memory safety: a GC eliminálja a dangling pointerek lehetőségét, ha emellett a nyelvben nincs pointer aritmetika, akkor egyszerűen lehetetlen memóriahibát okozni, míg C++-ban bármilyen hiba jelentkezhet segmentation fault formájában (jobb esetben).
- type safety: a memory safety előfeltétele a valódi type safety-nek - hogy egy objektumot ne lehessen úgy használni, mintha az egy másik típusú objektum lenne. A C++ type safety-je "mindössze" annyi, hogy a compiler front-end hibaüzenettel visszadobja a programok egy részét.