This means making use of library types for memory allocation, vectors and strings.
There is a place for old C style low level features, but those should come later, after the safer concepts are already ingrained.
Kate Gregory's “Stop Teaching C" talk at CppCon 2015 explains better than me.
https://www.youtube.com/watch?v=YnWhqhNdYyk
Get a nice IDE, QtCreator, Clion, VC++ Community, KDevelop, XCode.
Besides the "Tour of C++", check Stephan T. Lavavej talks at Channel 9.
"Core C++ Lectures"
https://channel9.msdn.com/Series/C9-Lectures-Stephan-T-Lavav...
"Advanced STL", these ones only when you already have a good understanding of STL as user
https://channel9.msdn.com/Series/C9-Lectures-Stephan-T-Lavav...
Also check video presentations from NDC, ACCU, CppCon, CppNow and C9 Going Native.
> First of all, and most important one, learn C++ idioms, not C.
I think it would be better to learn both. C programming really has its place, and it gives you a model to understand how the sausage is really made. I know lots of C++ programmers who couldn't even begin to understand how half the things in their language work, this leads to completely needless performance loss (like using vectors for statically-sized arrays of data, which I recently replaced with a C array in a piece of game modelling software for a 20-30% improvement in runtime).
The fact that you consider this the most important one is outlandish. I think it's easily more important to teach the tradeoffs and models involved in things like unique_ptr, rather than creating a cargo cult for abstractions that turn out to be useless half the time.
C++ programmers really need to learn C, at least after their first year of blissful ignorance. Don't stop teaching C.
C style code has only one place, unsafe C++ coding for optimization purposes, only after validated through the use of a profiler.
In 99% of the applications it is usually irrelevant for what the users are expecting, and there are even some nice talks at Nokia Wrocław conferences, where the presenter was able to generate better compacter code with modern C++ instead of classical C code.
It was the C mentality brought into C++, back when learning C before C++ was the only path as C compilers were adding C++ support, that brought the daily CVEs we nowadays endure in such codebases.
"There is a place for old C style low level features, but those should come later, after the safer concepts are already ingrained."
And I agree that teaching idiomatic C++ is important and C stuff is an extension.
If replacing vector with a C array gives you 20-30% my general assumption is that vector was used wrongly and there were too many copies happening and passing a pointer around avoided them.
And yes, when teaching pure C++ students will also easily create too many copies, but that's better than all the buffer overflows, null pointer dereferences etc. happening to students of C. Such bugs cause frustration, but students need results which give satisfaction.
See the idea is you can use std::array, so you can use modern idioms (and at() for bounds checked access).
No, not Xcode. Apple is not enthusiastic about c++ support and using Xcode is nice for debugging only, but write your code in something else. A lot of Mac devs will use Clion or for me, emacs, and then deploy or debug with Xcode when necessary.
Xcode doesn't format a lot of C++11 features properly and it's just a bad editor in general, even if you are using an "Apple-approved" language, which is why a lot of Swift/ObjC devs still use another JetBrains product, AppCode, for actual editing.
Also, the modern open source C++ stuff from Microsoft is also great.
Go for Chrome, V8, Dart, ChakraCore, the C++ part of DotNet VM.
But the only "problem" with them, is that they use their own sort of smart pointers, but if you know that they map 1-1 to smart pointers from std:: when you need to use the std ones, its not a big deal.
Chrome for instance have scoped_ptr = unique_ptr, scoped_refptr = shared_ptr, etc..
CppCon 2016: Kenny Kerr & James McNellis “Putting Coroutines to Work with the Windows Runtime"