Podemos acceder a variables privadas de otra clase cuando definimos copiar o mover constructores. ¿C ++ los hace el uno friend
al 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_str
puede acceder a miembros privados de todas las instancias de tipomy_str
, no solo lathis
instancia: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
private
miembros, 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
friend
de la clase, porque eso no tiene ningún sentido. Ya son parte de la clase. Aún así, tienen acceso a todos losprivate
miembros, no porque seanfriend
s, 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