Originariamente inviato da MegaAlchimista
Non so mi sembra veramente un approccio migliore controllare che ad ogni new corrisponda una delete, piuttosto che andare ad implementare un sistema simile.
Non è una cosa così banale... in primo luogo, a meno di non usare smart pointer e semantica RAII, è sostanzialmente impossibile garantire che ad ogni new corrisponda una delete, dato che, per via delle eccezioni, qualunque istruzione può essere un punto di uscita della funzione. Inoltre, se la semantica di ownership di un oggetto inizia ad essere "complicata" (ad esempio oggetti condivisi da più oggetti, o creati da una parte del programma e distrutti da un'altra, ...) tracciare il "ciclo di vita dell'oggetto" manualmente può essere complesso.
E se proprio si dovessero trattare oggetti in maniera complessa, puntati da parti diverse del programma (per esempio), non converrebbe usare degli smart pointer piuttosto?
È "l'altro approccio" rispetto alla garbage collection (anche se, se si hanno cicli di riferimenti, è necessario usare accortezze come i weak pointers).
Inoltre, smart pointer complessi (tipicamente gli shared_ptr) non sono neanche loro "gratuiti", specialmente in ambito multithreading.