En mi experiencia, los casos cuando el amigo (o mutable, que es un poco similar) para mejorar realmente la encapsulación de los datos son poco frecuentes en comparación con qué frecuencia se utiliza para romper la encapsulación.
Rara vez es útil para mí, pero cuando lo uso es para casos en los que he tenido que dividir una clase que anteriormente era una sola clase en dos clases separadas que necesitan acceder a algunos datos/funcionalidades comunes.
Editar para responder a Outlaw comentario del programador: Estamos absolutamente de acuerdo en esto. Otra opción aparte de las clases de amistad después de dividirlas es hacer acceso público, ¡que a veces rompe la encapsulación! Creo que algunas personas piensan que las clases amigas de alguna manera rompen la encapsulación porque la han visto usar inadecuadamente mucho, y muchas personas probablemente nunca ven el código donde se ha usado correctamente, porque es algo raro. Sin embargo, me gusta su forma de decirlo: la amabilidad es un buen término medio entre no permitirle dividir su clase y hacer TODO accesible para el público.
Editar para responder a David Thornley: Estoy de acuerdo en que la flexibilidad que C++ permite hacer cosas como esta es el resultado de las decisiones de diseño que entraron en C++. Creo que eso es lo que hace que sea aún más importante entender qué cosas son generalmente buenas y malas en un lenguaje flexible. La perspectiva de Java es que nunca deberías tener clases de amigos para que no se proporcionen, pero como programadores de C++, es nuestra responsabilidad como comunidad definir el uso apropiado de estos constructos de lenguaje muy flexibles pero a veces mal utilizados.
Editar para responder a Tom: Mutable no necesariamente rompe la encapsulación, pero muchos de los usos de la palabra clave mutable que he visto en situaciones de la vida real rompen la encapsulación, porque es mucho más común ver gente rompiendo la encapsulación con mutable que realmente encontrar y entender un uso adecuado de mutable en primer lugar.
Si bien obviamente hay un uso para las clases de amigos, de lo contrario las mentes más grandes de lo que no las habría incluido en la especificación del lenguaje, tiendo a mirarlas como un olor de diseño. En general, me indican que debo volver a mirar la jerarquía de mi clase y, en la mayoría de las ocasiones, generalmente me parece que puedo reestructurarla de manera más elegante y obviar la necesidad de una clase de amigos. – Mawg