So, about one year ago I was in the same boat as you: self taught c# dev who felt the need to learn C++. Granted, I stopped and started multiple times. On my third attempt, I finally stuck through it.
What is imperative to understand is that, in terms of C++ and C# methodologies, you will likely spend a lot of time understanding what data manipulation methods through pointers and references really means, as well as when and how to use them given the circumstances.
The nice thing about C++ is that object stack allocation is quite simple for the most part, and you should allocate objects this way if your program will meet the requirements specified under this method. Otherwise, you rely on pointers for speed, efficiency, and quick clean up. I recommend reading this: http://www.parashift.com/c++-faq-lite/ as it will give you a LOT of technical understanding of how C++ works under the hood.
Let me give you an example:
In C++ there exists this constructor implementation known as an "initialization list", which differs from initializing class members in the body of a constructor. Why? Because unless the type being initialized is primitive, the compiler will actually create multiple, and unnecessary copies of the object being created when allocated in the ctor's body. This can potentially reduce performance, depending on the compiler as well as the scaled requirements of the app.
Know what a delegate is? Well, in C++ it is known as a function pointer. This language is quite difficult to master at first, but if you want to be awesome... it's definitely required.
C# is easy...very easy.