Complexity
C++ does give programmers many brushes with which to paint whereas more recent languages restrict programmers by limiting them to standard frameworks and coding standards. That's why the C's are losing popularity. In these days, processors are measured in terms of giga and terraflops. Memory is measured in gigabytes. We no longer need to worry about tweaking the low-level implementation of an algorithm to eliminate a few constant time pointer redirections (or something) from a loop. We can keep track of the size of a list even if we never have to read it without fretting about performance loss. We can use dynamically sized arrays and not cry about all of the memory allocation and copying taking place. The cost of customizing algorithms for specific implementations no longer outweighs the development costs. Java, Hibernate, Struts, JSF, etc. have succeeded because they simplify development with negligible impact on performance.
I think the biggest difference is that Java supplies simple, understandable and re-usable code. It's written in plain English so developers don't have to commit hundreds of obscure function names to memory (strcpy, printf, sprintf, strcat, cout, endl).
C+++ could be even easier to use than Java if its creators understand that other people have to understand the language they create. Microsoft learned that lesson when updating VB. No more remembering lame function names (left, right, cint, cstr, lcase, sgn, rnd)!