c++ - Why do std::future<T> and std::shared_future<T> not provide member swap()? -
all kinds of classes in c++ standard library have member swap function, including polymorphic classes std::basic_ios<chart>
. template class std::shared_future<t>
value type , std::future<t>
move-only value type. there particular reason, don't provide swap()
member function?
member swap massive performance increase prior std::move
support in c++11. way move 1 vector spot, example. used in vector
resizes well, , meant inserting vector of vectors not complete performance suicide.
after std::move
arrived in c++11, many sometimes-empty types default implementation of std::swap
:
template<class t> void swap( t& lhs, t& rhs ) { auto tmp = std::move(rhs); rhs = std::move(lhs); lhs = std::move(tmp); }
is going fast custom-written one.
existing types swap
members unlikely lose them (at least immediately). extending api of new type should, however, justified.
if std::future
wrapper around std::unique_ptr< future_impl >
, above going require 4 pointer reads, 3 pointer writes, , 1 branch. , optimizating compiler inlined it1 reduce down 2 pointer reads , 2 pointer writes (using ssa2 example), optimized .swap
member function do.
1 knows intermediate access lhs
, rhs
never occurs, existence of tmp
can eliminated as-if once proves tmp
empty , hence has no-op dtor.
2 static single assignment, break program down such every assignment primitive creates brand new variable (with metadata). prove properties variable, , eliminate redundant ones.
Comments
Post a Comment