-O0 肯定是不行的,C++ 比速度一定要开优化。 不开优化的话,这里的 std::move 怎么说也是一个函数调用。多了一个函数调用就没法比了。 ``` .L51: mov rax, QWORD PTR [rbp-48] mov rdi, rax call std::remove_reference >&>::type&& std::move >&>(std::unique_ptr >&) mov rdx, rax lea rax, [rbp-120] mov rsi, rdx mov rdi, rax call std::unique_ptr >::operator=(std::unique_ptr >&&) add DWORD PTR [rbp-24], 1 .L50: cmp DWORD PTR [rbp-24], 999999 jle .L51 ``` 另外,你这个 unique_ptr 的测试里还多了一个 delete ,因为在第二轮循环 u1 为 nullptr ,u 就被 delete 掉了。