The problem with the likes of Java and C# is that you become dependent on 3rd party software to run your code. Want to support a new platform? You're completely dependent on someone porting the Java VM and a C# framework for it, while C++ allows you to begin coding for it on day one.
Is C# is really problematic since most of the tools you would use with it are still on Windows, though that may change with Microsoft putting a lot of their .Net stuff as open source. At least with Java you "Only" have to worry about the JVM being ported.