The most important thing about learning C++, in my opinion, is to realize that all of the OOP stuff is nothing more than a series of compiler tricks. What this means is that every C++ program you write can be translated into an equivalent C program without any loss of functionality. Inheritance, polymorphism, encapsulation, references, templates; everything can be done in C, albeit in a pretty unwieldy way.
Once you realize this, you will start to learn how certain C++ constructions would work in C and what kind of impact they have on your program's performance. Normal inheritance, for instance, doesn't have any negative impact on memory or processing time. Polymorphism on the other hand, does cost more memory and CPU power. But why? What do these virtual functions actually do to your data structures? What kind of logic works behind them?
Here comes the point of my story; once you know the answer to all these questions, you will be able to safely use C++ and its better design capabilities, without having to fear for your program's performance all the time. Even on the more critical platforms, embedded systems such as the GP2X. After all, you can reason about what your program would look like in C and how it will perform in comparison.
Now, obviously this isn't something you will learn within a short period of time. I would certainly recommend getting to know C really well first, before starting out with C++. Working with a good debugger will also help a lot in learning the inner workings of your programs.
Looking at myself personally, I have slowly learned the ins and outs of C over the course of several years. After that, it took me about a year of regular work with C++ to learn most of its intricacies. Just take a look at
this article that talks about member function pointers and explains how they work on different compilers. It has to be my favorite C++ article I've seen so far. It's just plain nuts.