Podemos acessar variáveis privadas de outra classe quando definimos copiar ou mover construtores. O C ++ os friend
cria automaticamente automaticamente?
Por exemplo:
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
fonte
fonte
Respostas:
Não é considerado amigo, mas sim, qualquer função membro da classe
my_str
pode acessar membros privados de todas as instâncias do tipomy_str
, não apenas athis
instância:A idéia geral por trás disso é permitir que dois ou mais objetos do mesmo tipo interajam sem precisar expor seus membros privados.
fonte
As funções de membro da própria classe sempre têm acesso aos
private
membros, independentemente de a função de membro ser definida dentro ou fora da classe e não importa se é uma função de membro especial, como um construtor de copiar / mover.Portanto, eles não são
friend
da classe, porque isso não faz nenhum sentido. Eles já fazem parte da turma. Ainda assim, eles têm acesso a todos osprivate
membros, não porque sejamfriend
s, mas porque fazem parte da classe.Se não fosse possível inicializar membros em um construtor (porque eles são inacessíveis), todo o conceito de acessibilidade de membros seria inútil. (Como você inicializaria o membro?)
Além disso, a acessibilidade não é de forma alguma uma questão do objeto no qual um membro é acessado. A acessibilidade é uma questão apenas de onde no código um nome (o nome do membro) é usado. Se uma função puder acessar o membro de uma instância de uma classe, também poderá acessar o membro de outra instância da mesma classe.
fonte