chciałbym zrobić
std::wstringstream temp;
ss.swap(temp);
Edycja: naprawiono błąd zgłoszony przez christianparpart i Nemo. Dzięki.
PS: Powyższy kod tworzy nowy obiekt stringstream na stosie i zamienia wszystko ss
z obiektami w nowym obiekcie.
Zalety:
- Gwarantuje, że
ss
będzie teraz w świeżo nowym stanie.
- Nowy obiekt jest tworzony w tekście i na stosie, dzięki czemu kompilator może łatwo zoptymalizować kod. Na koniec będzie to jak zresetowanie wszystkich
ss
danych wewnętrznych do stanu początkowego.
Jeszcze:
W porównaniu z operatorem przypisania: metody wymiany STL mogą być szybsze niż operator przypisania w przypadkach, gdy nowy obiekt ma przydzielony bufor w stercie. W takim przypadku operator przypisania musi przydzielić bufor dla nowego obiektu, wtedy MOŻE być zmuszony przeznaczyć inny bufor dla starego obiektu, a następnie skopiować dane z bufora nowego obiektu do nowego bufora starego obiektu. Bardzo łatwo jest zaimplementować szybką zamianę, która po prostu zamienia na przykład wskaźniki buforów.
C ++ 11. Widziałem pewną implementację operatora przypisania przenoszenia, która jest wolniejsza niż swap, chociaż można to naprawić, ale prawdopodobnie programista STL nie będzie chciał zostawić przeniesionego obiektu z dużą ilością danych
std::move()
nie gwarantuje, że przeniesiony obiekt zostanie opróżniony. return std::move(m_container);
nie czyści m_container. Więc będziesz musiał zrobić
auto to_return (std :: move (m_container)); m_container.clear (); return to_return;
Co nie może być lepsze niż
auto to_return;
m_container.swap(to_return);
return to_return;
ponieważ ta ostatnia gwarantuje, że nie skopiuje buforów.
Więc zawsze wolę swap()
tak długo, jak pasuje.