Yes this is the intended way to reset a shared pointer.
See http://en.cppreference.com/w/cpp/memory/shared_ptr/reset
Assignment is also supported, and has similar semantics.
b->A_ref = boost::make_shared<A>();
Make-shared is often preferred because
- it can help getting exception safety in function calls with more than one shared pointer parameter
- it can lead to more efficient memory representation of the reference counts