Eric Gunnerson recently posted some reasons why C# is an improvement over C++ and some updates. This post is a good read - be sure to consider the comments.

Some of my thoughts...

Sure, with C#, I do spend less time considering memory usage (i.e. preventing memory leaks), but the issue of closure doesn't go away. I still need to deterministically release resources and to do this I'm going to need to call Dispose(). The point I'm getting at here is that, as a programmer, I still need to spend time thinking about the same problem - resource management. Using C++, it's natural to deal with memory at the same time - memory is just another resource.

Sometimes I feel that the time I save thinking about memory usage is now spent figuring out what to do with exceptions. Exceptions aren't new to C#, there just seems to be more of them. I'm convinced that I write more lines of error handling code these days, but that's probably a good thing :O)

C# is a simplified language, compared to C++. That's a good thing for developers who are used to Visual Basic or Java, but in this simplification it does miss a lot of features that are available in C++ - which is why I don't wish for a 'winner' and applaud the enhancements being made to the C++ language and tools.

While some may never miss the C++ compilation model, I really do miss being able to view the 'interface' of a class. I can look at a C++ header file for a birds-eye view of the class, though this does rely on good code guidelines and can get unstuck with patterns that hide implementation. Being forced to write inline code just doesn't work for me. At a class level, C# just isn't as readable without the use of a tool.

Templates - they're tough to learn and can promote some very obtuse code, but they sure are powerful. Generics are a good start in C#, but don't come anywhere close to providing what C++ has to offer. I think STL and Boost get a bad rap because they're difficult to use and there are multiple implementations. If you've ever needed to choose the right smart pointer, you'll know what I mean. I do think that the C++ community can learn something from the simplicity and consistency of the .Net Framework.

At the end of the day, it's about choosing the right tool for the job.