- all pointer access done via smart pointers
- std::vector instead of native arrays
- Use std::vector::at() instead of std::vector::operator() unless profiling shows a relevant performance increase
- std:string instead of char*
- References instead of pointers for mutable parameters
If you do C like coding in C++, which is of course possible, then C++'s safety over C gets thrown out of the window.
When I get to decide, the continuous integration build is always done with all warnings enabled, warnings as errors and static analyzers tools.
The developers can do the local build as they prefer, though.
Me too, my first C++ compiler was Turbo C++ 1.0.
They are a lot safe than using the C direct pointer manipulation idioms that make it so easy to create insecure code that can explode at any moment.
What STL offers might not be 100% as safe as the Pascal family of languages offer among others, but it sure is a way lot better than using plain C idioms.
The problems you describe are quite easy to spot if a static analyzer is made part of the build.