What you must pick up in C++ that is not there in Java is having to manage resources by use of automated destructors.

C++ does not have memory garbage collection the way Java has it but does have the automatic destructor and advanced C++ programmers use these to do their garbage collection for them.

You will not have to do all this management yourself because you should use both standard and open-source libraries available to you that already provide a lot of the support for this, for example you will almost certainly want to use shared_ptr at some point, either in the boost or tr1 namespace (namespace is similar to package in Java).

In Java anything other than a primitive type must be created with new at all times. In C++ there are 3 ways a variable gets initialised:

1. auto variables, which are kept on the stack and are destroyed at the end of the block
2. heap-based variables allocated with new and require an explicit delete
3. class members (not pointers) which are destroyed just after the class that holds them.

Ignoring the complex "placement new" for now, the destructor of these objects gets called at the same the objects are destroyed.

You also need to beware that objects can be copied and what implications that has, particularly if they share pointers.

There is one other concept in C++ different from Java and that is const. You should learn to use that too.