(b) A function creates an object of class X dynamically and needs to return a pointer to that object back to the caller. How can this be implemented using the smart pointer types mentioned above? Is it OK to return a copy of a std::unique_ptr<X> or should you always return a shared pointer?