In general when is it better to allocate an object statically on the stack as opposed to dynamically on the heap

This question has 4 parts.

  1. In general, when is it better to allocate an object statically on the stack (as opposed to dynamically on the heap)? Give an example of a programming scenario where an object should certainly be stack-allocated.

  2. Now the opposite question: in general, when is it better to allocate an object dynamically on the heap (as opposed to the statically on the stack)? Give an example of a programming scenario where an object should certainly be heap-allocated.

  3. In general, when is it better to use a reference over a pointer? Give an example of a programming scenario where it is certainly better to use a reference.

  4. Now the opposite question: in general, when is it better to use a pointer over a reference? Give an example of a programming scenario where it is certainly better to use a pointer.