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

时间:2010-01-05 23:42:34

标签: c++ stl struct

假设我有一个包含std :: string的结构,如下所示:

struct userdata{
        int uid;
        std::string username;
    }

我是否需要创建一个复制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];
}

当我将用户数据结构插入std :: map时,会创建一个struct的副本,对吧?是否使用username字段的值创建了新的std :: string,或者是否发生某种按位复制(这会很糟糕)?类似地,当我从GetUserData方法返回userdata结构时,它是否有一个包含用户名的独立字符串,或者我是否需要定义一个副本ctor并显式创建一个新字符串?

4 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:3)

std :: strings本身可以没有任何问题地复制。

当您定义类(或结构)时,C ++默认会为您生成许多方法,包括复制构造函数和赋值运算符。我相信生成的复制构造函数将在每个字段上调用复制构造函数,生成的赋值运算符将在每个字段上调用赋值运算符。在复制userdata结构时,将为用户名字段调用std :: string的复制构造函数。

STL容器和算法应该使用复制构造函数和赋值运算符的某种组合,所以这一切都应该没问题。

答案 2 :(得分:2)

只要你没有指针作为你的datamembers,你应该没事。

答案 3 :(得分:0)

std :: string 是引用计数的,它的复制构造函数发生了。所以没什么值得担心的。一切都得到了正确处理。