Sì ma lì il motivo è un altro, ovvero che stai mischiando l'operatore >> con la getline. Inserire cin.ignore() a caso non serve a niente, devi capire il perché della cosa.
L'operatore >> ignora tutto il whitespace (newline, spazio, qualunque cosa), legge quello che deve leggere e si ferma al primo whitespace, che viene lasciato nel buffer di lettura; la getline invece inizia a leggere subito e si ferma al delimitatore (newline se non specificato) non lo lascia nel buffer di lettura.

Per questo motivo se l'utente inserisce
codice:
Nome
Cognome
Del testo a caso
e tu fai una cosa del tipo
codice:
cin>>nome;
cin>>cognome;
getline(cin, testo);
ovviamente in testo ti ritroverai una stringa vuota; infatti:
- cin>>nome; non c'è whitespace, legge direttamente Nome, si ferma al newline, lo lascia nel buffer;
- cin>>cognome; ignora il whitespace nel buffer (il newline a cui si era fermato prima), legge Cognome, si ferma al newline, lo lascia nel buffer;
- getline(cin, testo) parte subito a leggere, incontra subito il newline (che è il delimitatore), lo estrae dal buffer e si ferma.

In questo caso, puoi piazzare una std::cin.ignore(std::numeric_limits<std::streamsiz e>::max(), '\n'); tra la lettura di cognome e la getline per scartare tutti i caratteri rimasti nel buffer fino al successivo newline.

Se invece hai due getline consecutive, ovviamente non devi metterci in mezzo alcuna ignore, dato che ci pensano già loro a mangiarsi il delimitatore.