what is a std::shared_ptr?
A pointer that has (possibly shared) ownership of a n object. If the (last) shared pointer is deleted or goes out of scope, so is the object
should you use const std::string or const char*?
std::string, because it is better and can be converted to const char* if needed through c_str()