I work 50/50 C++ and JavaScript - C++ simulation models and an XUL based front end. Prior to that I’ve used Java both for both server and UI work, and a bit of C, Fortran, Pascal, various assembler, XSLT and Matlab. The use of C++ components with a scripting front end is not uncommon - most of Mozilla’s products are defined that way, as are many COM applications.
For modelling and simulation, if you have something processor heavy it’s likely to be mathematical. A good programmer can write Fortran in any language - well thought out algorithms operating mostly on primitive arrays. For that kind of code, with Java 1.4 you got better performance than MSVC++6 C; now VS2005 C is better than 1.6. C++ using stl fares worse than Java for tests such as SciMark. This is for modelling, not real-time simulation.
One of the modelling systems I’ve been called to work on cost 500,000 UKP per year in processor hours (the company was renting a legacy mainframe), so unless you’re a multi-millionaire we’re not in an era of abundance. On the other extreme, OLPC is a 100 dollar platform so again requires tight code.
Once you stop writing Fortran (and most sane people want to), the performance hits you get with Java or C++ seem to come from exploiting OO’s information hiding, so the compiler is not able to optimise across objects. Sometimes trading hot-spot optimisation for whole program optimisation pays, sometimes it doesn’t - for example inlining the most common case at runtime. The Fortress language, which runs on the JVM and is targetted at MS, is addressing this by flattening the program; I’ve also had success using model-driven development pipelines for generating flat code from high level maths models.
One weakness in C++ is that its templating system is not a very good model for meta-programming; Java and C# don’t even try, so there’s more external code generation options. Object oriented languages also have introspection and reflection, which C++ lacks, so I’ve ended up having to add them to every large C++ system I’ve worked on.
WRT RAII and garbage collector scheduling destruction, C# provides the ‘using’ statement that gives similar scope-delimited resource life-cycle semantics. It’s not a hard problem.
I don’t see C++ moving from realtime simulation yet (and that includes many video games, though there is use of scripting languages for AI and overall gameplay etc.) - it does most of what you want well enough, and lets you optimise for a traditional machine - until it’s pushed off by a language that can handle multi-core processors better.