Neměl jsem na mysli, že se úplně vzdá pointerů, to je samozřejmě nesmysl (bez nich nefunguje polymorfismus), ale že je nějak vhodně zabalí (třeba do shared_ptr z Boostu), aby se o ně nemusel starat (vzdá se tedy práce přímo s pointery, používá proxy objekty). Tím se velice účinně vyhne segfaultům i memory leakům. S voláním Céčkových funkcí může být problém, ale opět to lze vyřešit vhodným obalením anebo prostým operátorem *. Bohužel i zkušenější programátoři na tyto základní věci často kašlou a potom může dojít k rare condition, kterou netestovali, s následným memory leakem.
GC má na druhou stranu zásadní nevýhodu v tom, že nezaručuje čas volání destruktoru. Zkuste vytvořit fungující třídu pro zamykání mutexů, která hned po opuštění kritické sekce ten mutex automaticky odemkne (v C++ při opuštění scope díky stack unwind). Pokud se vám GC líbí, pro C++ existuje spousta knihoven, které to umí (klidně můžete přetížit new a cpát do GC všechno). Výhoda je v tom, že GC nemusíte používat.

