微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么字符串数据没有移动到目标,但向量是

如何解决为什么字符串数据没有移动到目标,但向量是

我有以下代码

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   

为什么 that.data 没有像 nvec 和 vec 那样移动到目标数据?

解决方法

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

您可以将参数类型更改为右值引用(到非常量)。

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

然后

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

LIVE

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。