A good computer science program should teach the students about the fundamentals, which are the same no matter which programming language you use. The things you mentioned, memory management, data structures, etc. are all part of these fundamental skills. In my experience, a programmer familiar with these concepts will engineer more better (more efficient, faster, easier) solutions than those that do not understand these concepts, especially for non-standard problems.
As for language choice, a good programmer should be able to pick up a new programming language in a matter of weeks, and become proficient in 1-2 months. This is especially true for C++ and Java, which have so many shared features.