Kitware interview question

Could you describe smart pointers? The different types of smart pointers? How do smart pointers like unique_ptr and shared_ptr work? What's the practical difference? What's a singleton? What does a singleton class mean?