Czy norma precyzyjnie określa, co mogę zrobić z przedmiotem po jego przeniesieniu? Kiedyś myślałem, że wszystko, co można zrobić z przeniesionym obiektem, to go zniszczyć, ale to nie wystarczy.
Na przykład weź szablon funkcji swap
zdefiniowany w bibliotece standardowej:
template <typename T>
void swap(T& a, T& b)
{
T c = std::move(a); // line 1
a = std::move(b); // line 2: assignment to moved-from object!
b = std::move(c); // line 3: assignment to moved-from object!
}
Oczywiście musi istnieć możliwość przypisania do obiektów przeniesionych, w przeciwnym razie linie 2 i 3 nie powiodą się. Więc co jeszcze mogę zrobić z obiektami przeniesionymi? Gdzie dokładnie mogę znaleźć te szczegóły w standardzie?
(Nawiasem mówiąc, dlaczego T c = std::move(a);
zamiast T c(std::move(a));
w wierszu 1?)
pop_back
przenieść się zvector
. Ale z pewnością możesz się dowiedzieć, czy tak jestempty()
.