Conceder acesso ao construtor privado sem amigos?

Estou trabalhando em algum código, onde encontrei uma situação semelhante a esta:

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;
}

Eu preferiria terBar não tãofriend doFooporque alémFoos construtorBar não precisa acessar nenhumFoos métodos privados (e, portanto, não devem ter acesso). Existe uma maneira de permitir apenasBar para criarFoos sem torná-los amigos?

PS: percebeu que a pergunta pode não estar 100% clara. Eu não me importo se é através de amigos ou não, apenas o fato de que todosBar O acesso a todos os métodos privados está me perturbando (o que geralmente acontece comfriends) e é isso que eu quero evitar. Felizmente, nenhuma das respostas dadas até agora teve um problema com essa péssima formulação.

questionAnswers(3)

yourAnswerToTheQuestion