std::move()为什么并没有发生移动呢

如下代码:从有两次构造和析构看,为什么emplace_back(std::move(stu))并没有移动呢?

class Stu{
public:
    Stu() {
        cout << "constuctor" << endl;
    }
    Stu(const Stu& stu){
        cout << "copy constuctor" << endl;
    }
    Stu(const Stu&& stu){
        cout << "move copy constuctor" << endl;
    }
    ~Stu() {
        cout << "destructor" << endl;
    }
};

int main(){
    vector<Stu> vec;
    Stu stu;
    vec.emplace_back(std::move(stu));
    return 0;
}
阅读 2.1k
3 个回答

移动构造应该是 Stu(Stu&& stu) ,没有 const。

移动构造是会修改参数的,不能是 const 。


而且,你这个移动了啊 : https://godbolt.org/z/da1cK4cvz

constuctor
move copy constuctor
destructor
destructor

我发现很多人还是不理解“移动语义”的含义到底是什么,见下:
移动指的是资源更有效率(相比于复制)的在对象间转移。
实现自定义的移动构造/移动赋值函数实际上就是在完成“资源转移”的具体逻辑。

新手上路,请多包涵

移动发生了, 建议学习一下什么是移动语义.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题