Hallo,
eventuell solltest du einfach bei neuen Fragen neue Themen eröffnen.
Mit zeilenweisem Auslesen von Dateien hat das ja nichts mehr zu tun.
Warum ein throw objekt; besser ist?
Dafür gibt es mehrere Gründe.
Zum einen kannst du verschiedene Typen werfen und wieder catchen und anhand dieser Typen auf die Fehlerart schließen. Wenn du nur einen Typ, z.B. const char* (throw "Test") wirfst, hast du zwar einen Text, müsstest diesen allerdings wieder parsen um zu wissen, was der Fehler eigentlich bedeutet. Sowas macht man einfach nicht, weil der reine Text, der ankommt, eine ziemlich unzuverlässige Information ist in dem Sinne, dass jeder dort irgendwas reinschreiben kann. Außerdem ist das völlig un.nötiger Aufwand.
Stattdessen kannst du z.B. throw MathematischerFehler() oder throw LogischerFehler() machen und später im catch auf diese Fehler wieder korrekt reagieren.
Außerdem wird im catch Vererbung unterstützt. Z.B. angenommen du hast folgende Klassenhierarchie:
class Basisfehler ...
class GanzSchlimmerFehler : public BasisFehler ...
class DieHoelleGefriert : public GanzSchlimmerFehler
// noch mehr ableitungen von GanzSchlimmerFehler
class NichtSoSchlimmerFehler : public BasisFehler ...
class Benutzereingabefehler : public NichtSoSchlimmerFehler ...
// und so weiter...
später kannst du ein catch auf BasisFehler machen, um jeden Typ von Fehler zu behandeln. Oder ein catch auf NichtSoSchlimmerFehler, um gezielt auf solche Fehler zu reagieren. Welche abgeleiteten Klassen es gibt, kann dir erstmal egal sein an dieser Stelle. Im Prinzip kannst du so gezielt auf bestimmte Fehlersituationen reagieren und andere Fehler allgemeiner behandeln oder auch garnicht behandeln und von einem übergeordneten catch erst auffangen lassen.
Ein catch(...) oder ein catch( const char*), wenn du nur const char* wirfst, fängt dir dagegen immer alle Fehler sofort weg. Dabei geht es mit einem catch( const KonkreterTyp&) viel viel einfacher, genauer, und vor allem im Code auch deutlicher erkennbar. Und du machst dir und dem Compiler weniger Arbeit, denn genau dafür (verschiedene Typen) ist das Exception-Handling da.
Ist das in etwa klar so?