Nerozumieš celkom. Tým kontrolovaním som myslel to, že musíš napísať x.Dispose();. V prípade, že sa ti vetví program trochu viac, tak potom kvôli Dispose() máš aj viac blokov try a podobne. To som tým myslel.
Ak povedzme, že alokuješ x1 a x2, pamäť ti môže pretiecť práve pri x2, takže x1 uvoľniť musíš, ale x2 nie, lebo by došlo k chybe. Čiže, ak chceš urobiť úplne čistý program C++, ktorý uvoľní skutočne len to čo treba, tak za každým new môžeš dávať blok try.