正如https://stackoverflow.com/a/3279550/943619巧妙地描述的那样,正确的实现operator=
方式通常是:
my_type& operator=(my_type other) {
swap(*this, other);
return *this;
}
friend void swap(my_type& lhs, my_type& rhs) { ... } // This can vary some.
然而,Howard Hinnant 指出,有时可以通过为左值和右值参数实现单独的重载来做得更好:
my_type& operator=(const my_type& other) { ... }
my_type& operator=(my_type&& other) { ... }
显然 2-overload 解决方案可以在几种情况下节省一步,但这样小的改进不太可能出现在基准测试中。相反,我正在寻找编写 2 个重载可以使性能提高一倍的情况。