Good language choice depends on the paradigms of programming you're most comfortable in.
There's been a lot of discussion of C++, but I don't think anyone's mentioned that a lot of its complexity comes from being a multiparadigm language. If you've got a good amount of exposure to not just imperative or OO programming but also things like functional programming, generic programming, metaprogramming, highly declarative style, etc.
If you grok this stuff and can spot when to usefully apply it, you can make C++ into a wonderful power tool for the right kind of job. Of course, if you grok all that stuff, you're probably pretty good at picking up new programming languages generally.
Personally, I value C++ for its expressiveness and ability to create powerfully general solutions. I find these unmatched in other languages of my experience, with Python running second due to its powerful and friendly functional programming support. That suits me because I'm inclined to devote my obsession to such generality, but I think that many people just want to make a game and should avoid this route because they won't get enough out of it to justify the learning curve.
In practice, I find that memory management is not one of my more typical stumbling blocks; it used to be more the case before the advent of smart pointers, which reduce the problem to not much more complexity for 95% of cases than that of e.g. Java.
I'm trying to think of what I
would consider my most common stumbling blocks. Honestly, most of the time when I'm sitting there thrashing without making progress it's not really a language issue, but a visibility issue -- I just can't get the proper view on things to make obvious what's going on. The best tonic I know for that is a strong willingness to take the time and build visualization in when you feel the need and can remotely justify it, because it pays for itself very quickly and keeps on paying. Plus, you never know when cool new gameplay might come out of it.
Here is a truly excellent
talk about immediacy in design that pertains to what I'm saying.
Okay, if I have to pick a C++ stumbling block though, I'll pick linking. Always a PITA, one way or a damn nother.
To anyone who feels like they wish to use C++ but can't quite get over how screwed up it seems to be, I recommend reading Bjarne Stroustrup's
The Design and Evolution of C++. It's a charmingly personal, incredibly informative, and quite readable account of the language's early history. Many design decisions are given detailed explanations that shed wonderful new light on C++ and the problems of language design in general. I promise that reading this book will instill in you great new respect for Stroustrup, and at the very least grudging respect for the accomplishment that C++ represents. Understanding why things have to be the way they are, what the compiler needs, etc. tends to make programming in C++ a lot easier because it feels less arbitrary (and hence easier to remember, too, since it's rooted in some principle).