示例:
std::unique_ptr<X> fun(std::unique_ptr<X> p) {
// Do something with the unique_ptr p
return p;
}
在其他地方,我发现了以下调用:
void someFunction() {
auto p = std::make_unique<X>();
//...
fun(std::move(p));
// Do something else
fun(std::move(p));
//...
}
所以我想知道这段代码是否正常,或者只是碰巧它执行了。
编辑:完成示例
发布于 2018-05-28 20:23:23
在此片段中:
fun(std::move(p));
fun(std::move(p));
p
是移出的,这会使其为空。所以当你第二次调用fun()
时,它会收到一个空指针。这很好,只要不取消引用该指针即可。
发布于 2018-05-28 20:43:00
在我看来,其意图是像这样调用fun
:
p = fun(std::move(p));
p = fun(std::move(p));
在这种情况下,p
的所有权将在函数之间来回传递。我更喜欢让fun
成为一个空函数,并通过引用传递p
,甚至作为原始的X*
类型。
https://stackoverflow.com/questions/50565966
复制相似问题