我的理解是不正确的。我认为移动的重点是强制 T&& 而不是 T 或 T& 过载。签名是
我还认为 T&& 与 T& 相同,只是表示引用超出范围。据我了解,图像中的代码应该是安全的。
rv.append 要么创建一个新副本(超出范围),要么重用超出范围的 rv。我认为实现会复制,因为移动就在那里。然后它确实再次追加,然后是移动。当它返回时,我认为因为它是对临时的引用,所以它不知道 temp 来自哪里,应该将它复制到堆栈上并推迟它的生命周期。
但是我不正确,修复程序与图像一起写在那里。为什么它不能那样工作?T&& 是否像我想的那样通过引用传递?关于右值引用,我还应该知道什么?
我也不明白std::unique_ptr<T> make_unique1(U&& u)
在这个例子中如何调用两个不同的函数