NIE wzajemnie się wykluczają. Zapraszam do korzystania z C++ z libgc (Boehm-Reiser-Detlefs collector). Nadal możesz korzystać z RAII, inteligentnych wskaźników i ręcznego usuwania, ale przy uruchomionym GC możesz po prostu "zapomnieć" o usunięciu niektórych obiektów.
@ Odpowiedź Andy'ego dotycząca zbyt późnego dysponowania zasobami mija się z istotną kwestią: to nie opóźnienie w udostępnianiu zasobów ma kluczowe znaczenie semantyczne, ale raczej kolejność wydania.
Powodem, dla którego GC ma tendencję do tego, by nie zamówić dobrze wydania, jest to, że wymagałoby to sortowania topologicznego na potrzeby zamawiania (zależności) i jest to kosztowny algorytm.
Niemniej jednak, Ocaml GC ma interesujący obiekt, w którym można dołączyć finalizator do obiektu. Jeśli obiekt stanie się nieosiągalny, uruchomi się finalizator, jednak obiekt nie zostanie usunięty (ponieważ finalizator może uczynić go ponownie osiągalnym: w takim przypadku można nawet dołączyć inny finalizator). Te finalizatory mogą zapewnić pewną kontrolę nad zamówieniami.
-1 Pytanie jest błędne. Są to śmieci zbierane języki z deterministycznymi destruktorami, np. 'IDisposable' na .NET zapewnia deterministyczne zniszczenie dla C#, VB.NET i F #. –