代码之家  ›  专栏  ›  技术社区  ›  Programmer

为什么字符串数据不被移动到目标,而向量被移动

  •  0
  • Programmer  · 技术社区  · 4 年前

    我有以下代码:

    class string
    {
        std::string data;
    
    public:
    
        string()
        {
            data = "Hello";
        }
        string(const string& that)
        {
            data = std::move(that.data);
            std::cout << data << " and that.data " << that.data;
        }
    };
    
    int main()
    {
        std::vector<int> vec = { 1, 2, 3, 4, 5 };
        std::cout << "vec size = " << vec.size() << std::endl;
        std::vector<int> nvec = std::move(vec);
        std::cout << "nvec size = " << nvec.size() << std::endl;
        std::cout << "vec size = " << vec.size() << std::endl;
        string s;
        string s1(s);
    }
    

    代码输出为:

    vec size = 5                                                                                                            
    nvec size = 5                                                                                                           
    vec size = 0                                                                                                            
    Hello and that.data Hello   
    

    为什么没有呢那个。数据移动到目标数据,如nvec和vec?

    1 回复  |  直到 4 年前
        1
  •  0
  •   songyuanyao    4 年前

    您正在声明参数 that const . 因此, data = std::move(that.data); 调用复制赋值运算符,而不是移动赋值运算符。Move操作应该对要移动的对象执行修改,而不应该这样做

    可以将参数类型更改为rvalue reference(非常量)。

    string(string&& that)
    {
        data = std::move(that.data);
        std::cout << data << " and that.data " << that.data;
    }
    

    string s;
    string s1(std::move(s));
    

    LIVE