Fragen? Antworten! Siehe auch: Alternativlos
auto ist ein tolles Convenience-Feature, mit dem man Variablen mit Initializer deklarieren kann, ohne den Typ spezifizieren zu müssen. Den erkennt der Compiler automatisch aus dem Initializer. So weit so gut.
Allerdings setzt modernes C++ auch auf Exceptions für Fehlerbehandlung. Wenn eine Exception geworfen wird, dann gibt es ein sogenanntes Stack Unwinding. Runtime-Code läuft rückwärts über den Stack bis zum Catch-Block, der die Exception fängt, und ruft alle Destruktoren von lokalen Variablen auf dem Weg auf.
Problem: Rohe Pointer haben keine Destruktoren. Eigentlich soll man in modernem C++ keine rohen Pointer mehr haben, sondern nur STL-Container oder Smart Pointer. Aber wenn man doch einen rohen Pointer hat und dem frisch allozierten Speicher zuweist, und dann eine Exception geworfen wird, dann leaked der Speicher hinter dem Pointer.
Daher ist das wichtig, dass man im Code sehen kann, wenn etwas ein roher Pointer ist. Sieht man aber nicht mehr, wenn alles auto ist. Dann muss der arme Auditor jeder beschissenen Zeile einzeln hinterherlaufen und die Typen selbst herleiten. Dann ist auto ein Denial of Service gegen den Auditor.
Update: Jetzt empfehlen mir diverse Leute Tools und Compiler-Warnungen und Refactoring-Methoden oder dass man ja auch auto* k = expr; schreiben kann. Das hilft mir leider als Auditor alles nichts, wie ich hier beklagt habe. Ich habe den Code normalerweise nicht in baufähigem Zustand, daher helfen mir auch solche Tools nicht. Und Best Practices helfen mir auch nicht, weil das ja nicht mein Code ist. Aber fürs Archiv: clang-tidy kann euch da helfen.