struct中的std :: string - 复制/赋值问题?

ala*_*10n 5 c++ struct stl

假设我有一个包含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并显式创建一个新字符串?

bma*_*ies 10

你不需要做任何特别的事情.C++(以及STL的实现)将此定义为正常工作.


ale*_*rus 0

std::string是引用计数的,并且发生其复制构造函数。所以没什么好担心的。一切都处理得当。

  • 虽然“std::string”的一些(大多数是旧的)实现是引用计数的,但大多数较新的实现不是。然而,无论如何,它必须正确处理复制构造、复制分配等,因此外部代码不需要担心它。 (3认同)