I agree largely... the team I'm on has a massive amount of legacy code written in C an C++. We don't use smart pointers, though... we found that they created more problems than they fixed. We rely on testing, code review, and tools to find leaks.

Anyways, small quibble -- Most .Net languages (C#, VB.Net, J#) will throw an exception on arithmetic overflow. This isn't a magic bullet, of course, but it does prevent some number of forehead slaps... Wink