Absolutely. These days three things that are usually in lesson 2 should move much, much later:
- strings as arrays of char*, the strlen, strxxx methods, and so on
- arrays in general and pointer arithmetic
- delete what you new, delete[] what you new[], and even destructors
These things that are usually in lesson 99 should move much, much earlier
- templates as things to use (write, not so much)
- std::string
- std::shared_ptr<>
- std::vector<>, iterators, other collections
Evey raw pointer should immediately be given to a smart pointer wrapper (I would start with shared, and consider unique later since it requires explaining std::move and rvalue references). Doing this will make learning C++ feel a lot like learning Java or C#, where you learn the library at the same time as the language. It will take away a lot of the memory work, too, and leave people less worried about gotchas.
I would also work lambdas into the picture the first time we wanted to iterate through a collection and do something to each element.
Disclaimer: I am writing a C++ course for Pluralsight right now and using this approach. The last module is "understanding other people's code" and that is where I will put the confusing stuff like char* strings, manual memory management, pointer arithmetic, and so on.
Update: a few people have asked why the existence of C++0x inspires teaching things that could have been taught with C++03. I think it's a number of things:
- truly smart pointers, that are collection friendly, take away the need for things like "an array of Employee pointers" that were causing us to always fall back on new/delete, pointer arithmetic etc
- auto takes away the pain of iterator declarations
- lambdas make foreaching something an ordinary person would do
- even something as trivial as parsing
>> correctly eliminates the gotcha that would be there when declaring some templates of templates - and so on
The way I see it, there are things we could have changed about the way we were teaching C++ some time ago, but some of us held back because we still needed the old-school way for a fallback or because teaching it just involved a lot of arcane knowledge.