c++11 smart pointers: create new instances of objects using std::shared_ptr.