There are some strong arguments for initializing objects on the stack. Is there ever a good scenario to allocate memory on the heap?
You certainly need to allocate objects in the heap when the number of objects or their actual type is known only at runtime (not at compile time) or when it is large. You don't want to have large call stack frames (a typical frame should be less than a kilobyte, since the entire stack is less than two megabytes and you could have recursive, or simply very deep, functions).
How does this work with polymorphic objects? For example, you have an abstract base class called Biome and you need a container of biomes. This container needs to store objects of Ocean, Tundra, Desert etc.
Your container will in fact store pointers to these objects. Of course, you may want to have smart pointers.