stl classes define swap() method void swap(a&), taking l-value reference. see example std::vector::swap, or question "is `std::move` necessary here?".
such definition means cannot swap r-values, since r-value won't bind however, see no harm in swapping r-values. construct it, steal it, place guts in it, destroy it. done. can add overload void swap(a&&) make happen.
i see 1 reason why not have overload out of box. because instead of writing
v.swap(rvalue); it better write
v = rvalue; and instead of swapping trigger move-assignment, more efficient. right reason valid? reason?
one of original move papers specified containers:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1858.html#23.2%20-%20sequences
and later propagated shared_ptr , function:
http://cplusplus.github.io/lwg/lwg-defects.html#743
http://cplusplus.github.io/lwg/lwg-defects.html#770
swapping rvalue arguments fell out of favor lwg 884:
http://cplusplus.github.io/lwg/lwg-defects.html#884
and n2844 subsequently removed all rvalue swaps:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2844.html
i'm not positive move. more modern shrink_to_fit() way of reducing memory, i'm not positive matters, since main use case of swapping rvalues.
Comments
Post a Comment