假设我有一个包含std :: string的结构,如下所示:
struct userdata{
int uid;
std::string username;
}
Run Code Online (Sandbox Code Playgroud)
我是否需要创建一个复制ctor或任何东西来从函数返回它或在STL容器中使用它?考虑这个功能:
userdata SomeClass::GetUserData(unsigned int uid)
{
//do error checking and other stuff...
//m_usermap is std::map<unsigned int, userdata>
return m_usermap[uid];
}
Run Code Online (Sandbox Code Playgroud)
当我将用户数据结构插入到std :: map中时,会创建一个struct的副本,对吧?是否使用username字段的值创建了新的std :: string,或者是否发生了某种按位复制(这会很糟糕)?类似地,当我从GetUserData方法返回userdata结构时,它是否有一个包含用户名的独立字符串,还是我需要定义一个copy ctor并显式创建一个新字符串?
std::string是引用计数的,并且发生其复制构造函数。所以没什么好担心的。一切都处理得当。