I would say it's not variable type, so much as making sure you clean up your memory. Java will clean up your memory, but C++ won't do it for you. Otherwise, managing your resources in the presence of exceptions is important.
On the plus side, you're going to get what they call "deterministic finalization." Huge benefit. Look up, as an acronym, "RAII". I think it's arguably one of the most important idioms in C++.
It stands for "Resource Acquisition Is Initialization", but what it really means is "When this destructor fires, I will clean up after you, even in the presence of exceptions." In practice, it means, any object that you create, or open, that you need to close or delete, you can hold using a smart pointer. The smart pointer will clean up after you. This is very, very powerful once you understand it and start using it. It makes your error checking, exception handling, and resource cleanup code very straightforward.