It will require a (small) paradigm shift.
Going from Java to C++ means:
- Raw pointers.
- It works the same way in 2010 as in 1995.
- No garbage collection.
- Need to understand the various ways of resource cleanup without GC, and their limitations.
- The importance of destructor.
- How smart pointers encapsulates these resource cleanup methods
- Use the appropriate type of smart pointers for resource.
- How resource management, sharing and smart pointers affect API design
- How RAII, smart pointers and exception work together
- Pick up the standard libraries, including STL. Also need to pick up platform-specific APIs, maybe a couple other libraries because the standard library is not as powerful as Java's.
- Learn just enough C++ templates to be able to use the libraries.
RAII basically means the lifetime of a resource is either:
- Same as a C++ object, by putting the resource into a class member, initializing it in the constructor (or an initialize function) and releasing it in the object's destructor,
- Same as a scope, which may be a function or some code surrounded by braces
{}. This requires the resource be encapsulated by a C++ object, so that it is released by the destructor at the end of scope, regardless of normal or exception.
RAII requires a more hierarchical ownership structure. It does not allow sharing resources between two objects where one may be released independently of another, unless the two objects are in turn owned by the same higher-level object.
Reference-counting allows sharing resources between objects having independent lifetimes. However, care should be taken to avoid cyclic references when using reference-counting.
There is something called Boehm GC (mark-sweep) which tries to bring back the joy of automatic garbage collection to C++, but it's not a silver bullet.
The learning process is much easier and productive if the first few months of going to C++ is spent working on an existing "Clean" C++ code base, which uses the main C++ features without touching the difficult concepts. (I took 6 months.)
If the project involves multi-threading, porting will be much more difficult.
Edited You probably need to learn goto because there is no equivalent of labeled break in C++.