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

问题描述 投票:1回答:1

假设你有这个简单的类:

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

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

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

c++ c++11 move move-semantics rvalue-reference
1个回答
3
投票

那么,通过一个例子可以很容易地理解std::move的效果:

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));

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

© www.soinside.com 2019 - 2024. All rights reserved.