remove all occurrences of delete keyword by using smart pointers
we should also check for all calls to new (I know we can not always remove new by make_shared because not always the constructor is public).
we should also check for all calls to new (I know we can not always remove new by make_shared because not always the constructor is public).