Функции-члены самого класса всегда имеют доступ к private
членам, независимо от того, определена ли функция-член в классе или вне класса, и не важно, является ли она специальной функцией-членом, такой как конструктор копирования / перемещения.
Поэтому они не friend
из класса, потому что это не имеет никакого смысла. Они уже являются частью класса. Тем не менее, они имеют доступ ко всем private
членам не потому, что они friend
, а потому, что они являются частью класса.
Если бы не было возможности инициализировать элементы в конструкторе (потому что они недоступны), тогда вся концепция доступности элементов была бы бессмысленной. (Как бы вы инициализировали участника?)
Кроме того, доступность никоим образом не зависит от объекта, к которому обращаются члены. Доступность зависит только от того, где в коде используется имя (имя члена). Если функция может получить доступ к члену одного экземпляра класса, то она также может получить доступ к члену другого экземпляра того же класса.