capture by value
wrap COW std::string in shared_ptr to avoid data racing
pass by value