Added smart pointers to SystemManager and made destructor in System class public, as it was had incorrectly been set as protected before.