这段代码是我想要做的:
Tony& Movie::addTony()
{
Tony *newTony = new Tony;
std::unique_ptr<Tony> tony(newTony);
attachActor(std::move(tony));
return *newTony;
}
我想知道我是否可以这样做:
Tony& Movie::addTony()
{
std::unique_ptr<Tony> tony(new Tony);
attachActor(std::move(tony));
return *tony.get();
}
但是会*tony.get()
是相同的指针还是null?我知道我可以验证,但是标准操作是什么?
不,您不能这样做。移动unique_ptr
null即可。如果不是,那么它将不是唯一的。我当然假设这样attachActor
做不会像这样愚蠢:
attachActor(std::unique_ptr<Tony>&&) {
// take the unique_ptr by r-value reference,
// and then don't move from it, leaving the
// original intact
}
第20.8.1节第4段。
另外,根据请求,u(unique_ptr对象)可以将所有权转移到另一个唯一指针u2。在这种传输完成时,下面的后置条件成立:
- u2.p等于转印前起来,
- 最多等于nullptr,和
-如果所述预转印UD维护的状态,这样的状态一直转移到u2.d。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句