【发布时间】:2017-07-11 13:51:13
【问题描述】:
在下面的代码中,我有一个函数可以修改两个复制成本高的对象,我试图在没有输出参数的情况下逃脱
struct FatThing {/* some big data members here*/};
auto processFatThings(FatThing ft1, FatThing ft2)-> std::tuple<FatThing, FatThing> {
// do smth with those two
return std::make_tuple(move(ft1), move(ft2));
}
auto useProcessFatThings()-> void {
FatThing ft1, ft2;
std::tie(ft1, ft2) = processFatThings(move(ft1), move(ft2)); // dangling references?
}
我现在有点困惑,因为编译器不会发出任何警告,消毒剂和 memcheck 是干净的,并且代码可以正常工作。但!!!这里不是用 std::tie 创建的悬空引用吗?
【问题讨论】:
-
你认为为什么会涉及到悬空引用?您没有在任何地方使用引用,无论是在函数参数中还是在返回类型中。