将左值引用移动到成员变量中

时间:2018-01-01 17:07:45

标签: c++ c++11 move move-semantics rvalue-reference

假设你有这个简单的课程:

class GenericClass {
public:
    GenericClass(std::unique_ptr<uint8_t[]>& lref) {
    this->var = std::move(lref);
}

private:
    std::unique_ptr<uint8_t[]> var;
}

ctor如何处理&#34;移动&#34;? 参考指向的左值的所有权是转移到成员变量还是参考另一个左值?

1 个答案:

答案 0 :(得分:3)

嗯,通过一个例子可以很容易地理解std::unique_ptr<uint8_t[]> data = ... ; assert(data != nullptr); //data is not nullptr GenericClass obj(data); //the resource is transferred assert(data == nullptr); //data must be nullptr 的效果:

data

希望这些评论可以解释到底发生了什么。

但是,如果没有评论,则资源从obj转移到GenericClass(std::unique_ptr<uint8_t[]>&& lref) //note && : var(std::move(lref)) //use mem-initialize-list { } 并不十分清楚,因为构造函数的设计不够好。所以我建议明确说明:

GenericClass obj(std::move(data));

现在客户端应该写这个:

require(...)

现在即使没有评论,客户端代码也是可以理解的。