Entrada de String Básica

Acabei de encontrar esse código que permite aos usuários inserir strings no prompt de comando. Estou ciente do que eles fazem e tudo é ótimo. Mas eu tenho uma pergunta em relação às funções cin e getline ().

string name ;
cout << "Please enter your full name: " ;
cin >> name ;
cout << "Welcome " << name << endl ;
cout << "Please enter your full name again please: " ;
getline(cin , name) ;
cout << "That's better, thanks " << name << endl ;
return 0 ;

Agora, quando esta é a saída, eu recebo algo ao longo das linhas de: (usando john smith como a entrada)

Please enter your full name: john smith
Welcome John
Please enter your full name again: That's better thanks Smith

Eu entendo porque isso acontece, o getline ainda está lendo o buffer de entrada e eu sei como consertá-lo. Minha pergunta é: por que não há novas linhas após o "Por favor, digite seu nome completo de novo:"? Quando altero o código para:

string name ;
cout << "Please enter your full name: " ;
cin >> name ;
cout << "Welcome " << name << endl ;
cout << "Please enter your full name again please: " ;
cin.ignore( 256, '\n') ;
getline(cin , name) ;
cout << "That's better, thanks " << name << endl ;
return 0 ;

De repente eu recebo uma nova linha depois que você digita seu nome completo novamente. Não é realmente um grande problema para ser honesto. Mas eu não me importaria de saber o que aconteceu se alguém puder me ajudar. Obrigado!

questionAnswers(1)

yourAnswerToTheQuestion