- implemented factories to create instances of classes
- added default constructor if exists to every type
- added shared_ptr This for created instances to avoid leaks