Sí, cin es mas limpia que scanf, porque este último no limpia el buffer.
cin no
limpia el buffer tampoco. La diferencia es que si por ejemplo, lees un numero, si luego vuelves a leer otro numero se lee el salto de linea pero se descarta, pero si por ejemplo lees una cadena o un carácter sucede lo mismo que con scanf. Es decir, el salto de linea permanece en buffer en ambos casos.
Igualmente no se pueden comparar, son dos lenguajes distintos, uno es un objeto y el otro es una función. No son comparables salvo a grandes rasgos por lo que no tiene caso ahondar en las diferencias.
Saludos