Here's a radical idea: in addition to learning C++, how about learning D (a programming language which much of the structure of C++, native code generation, range checking and garbage collection).
I've gone into this a lot elsewhere so I will not go into this at length here. The simple fact is, for large complex programs, especially multi-threaded programs it is difficult or impossible to write reliable code in C++. In particular, it is impossible to escape from memory reference errors. Even using memory testing tools will not find these errors, since they rely on the path taken through the code.
The fact that we are still using a dangerous language like C++ is the cause of a lot of software failure. If Java is not fast enough for your application then the D language is a good choice. D has memory range checking and garbage collection. It avoids some of C++'s ugly syntax (e.g., templates). The language compiles into native code.
Hopefully, after the debacle at Knight Capital people will start to think about how important software quality is. You can design more reliable software in Java or in D.
One poster, who doesn't know much about compiler optimization and code performance, suggested that C should be used for performance reasons. What this poster doesn't realize is that C is very difficult to optimize because it has pointers, not arrays. The D language was designed by one of the best compiler designers I know of (Walter Bright). D can be optimized much more efficiently than C or C++. So if you really want code that is as fast as possible, D is, again, a better choice.