【问题标题】:In a move constructor what means "member(other.member)"在移动构造函数中,“member(other.member)”的含义是什么
【发布时间】:2020-12-23 03:52:47
【问题描述】:

可能我不是很清楚

    class Class {
    int member;
    otherClass otherClass_member;
    Class() { ... }
    Class(int x) { ... }
    Class(const Class &other) { ... }
    Class(Class &&other) : member(other.member), otherClass_member(std::move(other.otherClass_member)) {
    member=other.member;
    otherClass_member=std::move(other.otherClass_member);
    other.member=0;
    //other.otherClass_member = ???;
    }
    ~Class() { ... }

我有 3 个问题:

  1. member(other.member), otherClass_member(std::move(other.otherClass_member)) 这是做什么的?
  2. 它需要这个member=other.member; otherClass_member=std::move(other.otherClass_member);吗?我之所以这么问,是因为有些教程放了有些没有。
  1. 如果我有上面的代码,我应该如何处理这个字符串other.otherClass_member = ???;

【问题讨论】:

    标签: c++ move-constructor


    【解决方案1】:

    这是做什么的member(other.member), otherClass_member(std::move(other.otherClass_member))?

    这些初始化您正在构建的对象的成员。如果otherClass 具有移动构造函数,则使用std::move() 允许窃取现有对象other 的资源。

    它需要这个member=other.member; otherClass_member=std::move(other.otherClass_member);?

    它不仅不需要这个,而且这将是一个错误,因为你会moveing other.otherClass_member 两次。您可以使用这些语句代替上述初始化,但这是一个劣等选择,并且只有在otherClass 具有默认构造函数时才有可能。

    如果我有上面的代码,我应该如何处理这个字符串 other.otherClass_member = ???;

    你根本不需要它。 otherClass 的移动构造函数应该处理这个(如果移动构造函数不存在,则复制构造函数)。

    【讨论】:

    • 谢谢,你说的很清楚,让我明白了很多东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 2016-12-15
    • 1970-01-01
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多