Podemos acceder a variables privadas de otra clase cuando definimos copiar o mover constructores. ¿C ++ los hace el uno friendal otro automáticamente?
Por ejemplo:
my_str::my_str(my_str&& m)
{
size_ = m.size_; //accessing private variable another my_str class
buff_ = m.buff_; //accessing private variable another my_str class
m.buff_ = nullptr;
m.size_ = 0;
}
c++
friend-class
redkont
fuente
fuente

Respuestas:
No se considera amigo, pero sí, cualquier función miembro de la clase
my_strpuede acceder a miembros privados de todas las instancias de tipomy_str, no solo lathisinstancia:La idea general detrás de esto es permitir que 2 o más objetos del mismo tipo interactúen sin tener que exponer a sus miembros privados.
fuente
Las funciones miembro de la clase en sí siempre tienen acceso a los
privatemiembros, sin importar si la función miembro se define dentro de la clase o fuera de clase y si se trata de una función miembro especial como un constructor de copia / movimiento.Por lo tanto, no son
friendde la clase, porque eso no tiene ningún sentido. Ya son parte de la clase. Aún así, tienen acceso a todos losprivatemiembros, no porque seanfriends, sino porque son parte de la clase.Si no fuera posible inicializar miembros en un constructor (porque son inaccesibles), entonces todo el concepto de accesibilidad de miembros sería inútil. (¿Cómo inicializarías al miembro?)
Además, la accesibilidad no es de ninguna manera una cuestión del objeto en el que se accede a un miembro. La accesibilidad es solo una cuestión de en qué parte del código se usa un nombre (el nombre del miembro). Si una función puede acceder al miembro de una instancia de una clase, entonces también puede acceder al miembro de otra instancia de la misma clase.
fuente