1. Scope is also limited 2. Platform dependent 3. does not give excellant graphics as compare to java 4. Not case sensitive 5. Less features as comapred to Java& C#. 6. Not applicable in web enviornment
In addition extra programming effort is required in C++ to free up used memory - using delete etc for all the memory locations that are used on the heap. In Java the garbage collector automatically frees up memory when the variable goes out of scope (although we cannot be sure that it does run)
Not knowing when the garbage collector will run is a real problem in Java. The issues in Java surround the JVM and second guessing how it will behave. So the problem domain has just shifted but now it has become more speculation than scientific fact unless you know the JVM implementation.
In that case you will also need to know C++!!!!!!
Just to correct points made earlier by others.
C++ is not pure OO it is all OO plus C backward compatibility. C++ is case sensitive.... this shows that some haven't event written a line of code in C++ The issues some people have with C++ normally amount to the fact that they don't have the required skill to program in that language. The advice is; stick to what you know.
In regards to memory management. I have never had any problems with it.
Graphics; well the most sophisticated graphics are rendered and written using C++.
Some can drive a family car but few would be able to drive a formula 1 racing car!!!!!
C++ has plenty of features than C so a lot of syntax needs to be know by the programmer. Well when we need more we should learn more.
Another disadvantage is that C++ is not suitable for embedded controllers as the executable size is more in C++ than in C and assembly. This is because more assembly instructions are internally generated to ensure total privacy and encapsulation.
By using exceptional handling we slow down the process so is the case with virtual functions.
So C++ is not suited in embedded applications which are limited by memory and speed.