@ tobi303 Я только что понял, что эта техника также позволяет вам использовать умные указатели, которые прямая дружба не делает.

отаю над некоторым кодом, где я столкнулся с ситуацией, похожей на эту:

struct Bar;

struct Foo{
    friend struct Bar;
private:
    Foo(){}
    void f(){}
    void g(){}
};

struct Bar {
   Foo* f;
   Bar()  { f = new Foo();}
   ~Bar() { delete f;}
};

int main(){
  Bar b;
}

Я бы предпочел иметьBar не такfriend изFooпотому что кромеFooконструкторBar не нуждается в доступе ни к одному изFooЗакрытые методы (и, следовательно, не должны иметь доступа). Есть ли способ разрешить толькоBar создаватьFooбез друзей?

PS: понял, что вопрос не может быть на 100% ясным. Я не против, если это через друзей или нет, просто тот факт, что всеBar имеет доступ ко всем частным методам, меня беспокоит (что обычно происходит сfriends) и это то, чего я хочу избежать. К счастью, ни один из ответов, приведенных до сих пор, не имел проблемы с этой паршивой формулировкой.

Ответы на вопрос(3)

Ваш ответ на вопрос