假设你有这个简单的课程:
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;? 参考指向的左值的所有权是转移到成员变量还是参考另一个左值?
答案 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(...)
现在即使没有评论,客户端代码也是可以理解的。