std::string in struct - Copy/assignment issues?

c++, stl, struct

Solution

std::string is reference-counted, and its copy constructor takes place. So nothing to worry about. Everything is handled correctly.

Problem

Suppose I have a struct containing a std::string, like this: ``` struct userdata{ int uid; std::string username; } ``` Do I need to create a copy ctor or anything to return it from a function or to use it inside a STL container? Consider this function: ``` userdata SomeClass::GetUserData(unsigned int uid) { //do error checking and other stuff... //m_usermap is std::map<unsigned int, userdata> return m_usermap[uid]; } ``` When I insert userdata structs into the std::map, a copy of the struct gets created, right? Does a new std::string get created using the value of the username field, or does some sort of bitwise copy happen (this would be bad)? Similarly, when I return a userdata struct from the GetUserData method, does it have an independent string holding the username or do I need to define a copy ctor and explicitly create a new string?

Original source