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.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.
È "l'altro approccio" rispetto alla garbage collection (anche se, se si hanno cicli di riferimenti, è necessario usare accortezze come i weak pointers).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?
Inoltre, smart pointer complessi (tipicamente gli shared_ptr) non sono neanche loro "gratuiti", specialmente in ambito multithreading.

Rispondi quotando