Ci sono delle leggere differenze che però possono diventare dei motivi sostanziali per scegliere l' uno o l' altro.
Innanzitutto l' operatore >> legge una stringa alla volta e considera gli spazi come separatori.Per esempio se leggi da stdin o da file la stringa: "ciao come stai?", se sai che è lunga 16 caratteri usi la read e leggi esattamente 16 byte, invece l' operatore >> legge solo "ciao" perché considera lo spazio come un separatore.
Altra differenza è che una classe potrebbe fare overloading dell' operatore >> o << e quindi causare un input/output diverso dal metodo read/write di ifstream e ofstream.
Però vedo che hai usato anche la getline(), in generale visto che ti funziona (almeno spero) e che non hai usato classi particolari ne il tipo string, direi che non c'è motivo per considerare questo programma errato, a meno che non trovi degli errori effettivi.
Però aspetto anche la conferma di qualche altro utente.