Non è esatto. Se l'operazione lettura/scrittura fallisce per qualche motivo, i flag interni passano da .good() a qualcosa che può essere eofbit(), badbit() o failbit() a seconda dei casi, ma l'intero stream è invalidato e ogni operazione successiva di lettura / scrittura fallisce.Dalla lettura della documentazione, se non ho capito male, entrambe dovrebbero essere operazioni che non invalidano l'oggetto stream, che sta svolgendo l'operazione, ma settano i flag interni a valori che descrivono quanto successo.
La variabile temporanea è solo una perdita di tempo. Se la lettura avviene con successo, i dati sono immediatamente disponibili; se c'è un fallimento non li hai proprio.Stando cosi le cose, finita la scrittura, verifico che il / i flag siano 'a posto', nel caso di lettura, piu o meno idem, cioe' faccio l'operazione di lettura in una variabile temporanea, verifico i flag dello stream per avere conferma che l'operazione sia avvenuta con successo, quindi copio il valore nella variabile vera e propria.
Il controllo puoi sempre farlo alla fine, ma se vuoi farlo man mano nulla te lo vieta. A quel punto però forse converrebbe abilitare le eccezioni per lo stream ed evitare un sacco di if.
Detto molto in breve. O va o non va: non esiste un va così così.