None of what you're really asking about has anything to do with stack vs heap. It's ALL on the stack here. The difference between these two is
not about where it puts thing.
Foo::Foo(Bar _b) :bar(_b){}Foo::Foo(Bar _b){ bar = _b;}
The difference is about unnecessary work being performed (efficiency). The second one first calls the default constructor for bar, and then calls the asignment operator for bar. The assignment operator is reponsible for releasing the current things held by itself, as well as copying the new things to itself.
By using the top one of these two you avoid both the default initialisation, and the undoing of that default initialisaed state, and do only the constructing of the copied state.
(I'm assuming Bar is a class here, and potentially not a tiny class) It's even better to pass _b by reference.
It makes no difference if Bar were say a typedef for int though, but it's still good practice to use constructor initialisation lists every time you actually have a choice. Less code to improve upon if you were to change types later.