@ 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
) и это то, чего я хочу избежать. К счастью, ни один из ответов, приведенных до сих пор, не имел проблемы с этой паршивой формулировкой.