Constructors are necessary to initialize classes. It allows to
avoid to a lot of problems with unauthorized access of memory.
Dynamic allocation makes possible allocation of memory during
execution of program. If you do not use dynamic allocation, all
required memory will be allocated during initialization phase
(constructors are usually responsible for that). But you can't use
more memory. Dynamic allocation was designed to overcome such
problems.