¿Cómo inicializar un shared_ptr que es miembro de una clase?

No estoy seguro de una buena manera de inicializar unshared_ptr ese es un miembro de una clase. ¿Puedes decirme si la forma en que elijoC::foo() está bien o hay una solución mejor?

class A
{
  public:
    A();
};

class B
{
  public:
    B(A* pa);
};

class C
{
    boost::shared_ptr<A> mA;
    boost::shared_ptr<B> mB;
    void foo();
};

void C::foo() 
{
    A* pa = new A;
    mA = boost::shared_ptr<A>(pa);
    B* pB = new B(pa);
    mB = boost::shared_ptr<B>(pb);
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta