Nous pouvons accéder aux variables privées d'une autre classe lorsque nous définissons des constructeurs de copie ou de déplacement. Est-ce que C ++ se fait friend
automatiquement?
Par exemple:
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
la source
la source
Réponses:
Il n'est pas considéré comme un ami, mais oui, toute fonction membre de la classe
my_str
peut accéder aux membres privés de toutes les instances de typemy_str
, pas seulement l'this
instance:L'idée générale derrière cela est de permettre à 2 ou plusieurs objets du même type d'interagir sans avoir à exposer leurs membres privés.
la source
Les fonctions membres de la classe elle-même ont toujours accès aux
private
membres, que la fonction membre soit définie en classe ou hors classe et qu'il s'agisse d'une fonction membre spéciale telle qu'un constructeur de copie / déplacement.Par conséquent, ils ne sont pas
friend
de la classe, car cela n'a aucun sens. Ils font déjà partie de la classe. Pourtant, ils ont accès à tous lesprivate
membres, non pas parce qu'ils sontfriend
s, mais parce qu'ils font partie de la classe.S'il n'était pas possible d'initialiser des membres dans un constructeur (car ils sont inaccessibles), alors le concept entier d'accessibilité aux membres serait inutile. (Comment initialiseriez-vous le membre?)
De plus, l'accessibilité n'est en aucune façon une question de l'objet sur lequel un membre est accédé. L'accessibilité ne dépend que de l'endroit où dans le code un nom (le nom du membre) est utilisé. Si une fonction peut accéder au membre d'une instance d'une classe, elle peut également accéder au membre d'une autre instance de la même classe.
la source