Absolut. Heutzutage sollten sich drei Dinge, die normalerweise in Lektion 2 enthalten sind, sehr viel später bewegen:
- Zeichenfolgen als Arrays von char *, den Methoden strlen, strxxx usw.
- Arrays im Allgemeinen und Zeigerarithmetik
- lösche was du neu hast, lösche [] was du neu hast [] und sogar Destruktoren
Diese Dinge, die normalerweise in Lektion 99 enthalten sind, sollten sich viel früher bewegen
- Vorlagen als Dinge zu verwenden (schreiben, nicht so viel)
- std :: string
- std :: shared_ptr <>
- std :: vector <>, Iteratoren, andere Sammlungen
Jeder rohe Zeiger sollte sofort einem intelligenten Zeiger-Wrapper übergeben werden (ich würde mit "shared" beginnen und später als "unique" betrachten, da dazu die Referenzen std :: move und rvalue erklärt werden müssen). Auf diese Weise fühlt sich das Erlernen von C ++ wie das Erlernen von Java oder C # an, bei dem Sie die Bibliothek gleichzeitig mit der Sprache erlernen. Es wird auch viel Gedächtnisarbeit wegnehmen und die Leute weniger besorgt über Fallstricke sein lassen.
Ich würde auch Lambdas in das Bild einarbeiten, wenn wir zum ersten Mal durch eine Sammlung iterieren und mit jedem Element etwas anfangen wollten.
Haftungsausschluss: Ich schreibe gerade einen C ++ - Kurs für Pluralsight und benutze diesen Ansatz. Das letzte Modul ist das "Verstehen des Codes anderer Leute" und hier werde ich die verwirrenden Dinge wie Zeichenketten, manuelle Speicherverwaltung, Zeigerarithmetik und so weiter platzieren.
Update: Einige Leute haben gefragt, warum die Existenz von C ++ 0x Lehrinhalte inspiriert, die mit C ++ 03 hätten vermittelt werden können. Ich denke, es ist eine Reihe von Dingen:
- Wirklich intelligente Zeiger, die sammlungsfreundlich sind, machen Dinge wie "eine Reihe von Zeigern für Mitarbeiter" überflüssig, die uns veranlassten, immer auf neue / Lösch -, Zeigerarithmetik usw. zurückzugreifen
- auto beseitigt den Schmerz von Iterator-Deklarationen
- Lambdas machen etwas, was ein gewöhnlicher Mensch tun würde
- Selbst etwas so Triviales wie das
>>
korrekte Parsen beseitigt das GOTCHA, das beim Deklarieren einiger Vorlagen von Vorlagen vorhanden wäre
- und so weiter
So wie ich das sehe, gibt es Dinge, die wir an der Art und Weise, wie wir C ++ unterrichteten, vor einiger Zeit hätten ändern können, aber einige von uns hielten sich zurück, weil wir immer noch den Old-School-Weg für einen Fallback brauchten oder weil das Unterrichten einfach viel bedeutete des arkanen Wissens.