Я понимаю, что предоставление метода, который возвращает указатель на закрытый метод, нарушает инкапсуляцию и предоставляет поле любому, кто использует класс.
Это неверно для начала,
Класс, у которого есть метод, который возвращает указатель как часть его интерфейса, абсолютно нормален, и тот факт, что он возвращает переменную-член, является подробностью реализации , которую внешний мир не делаетнужно знать.
Теперь, как говорится, сложно разработать разумный интерфейс класса, который включает функции, которые возвращают не владеющие указателями, поэтому мы стараемся избегать этого.
Редактировать в отношении второй части вопроса:
Предполагается, что любой класс должен разумно обрабатывать любые возможные варианты использования своего открытого интерфейса (включая разыменование ссылок).любые возвращенные указатели).Предполагается, что то, кто или кто использует открытый интерфейс, совершенно не имеет значения, и вы должны предполагать, что все пользователи класса будут использовать весь открытый API.
Если у вас есть части класса, которые вам нужнычтобы сделать доступными определенные типы или функции, тогда это именно то, для чего friend
.Но это не имеет ничего общего с указателями на членов, оно относится ко всем частям класса.