Tiêu chuẩn có xác định chính xác những gì tôi có thể làm với một đối tượng một khi nó đã được di chuyển từ đó không? Tôi đã từng nghĩ rằng tất cả những gì bạn có thể làm với một đối tượng chuyển từ là phá hủy nó, nhưng điều đó là không đủ.
Ví dụ: lấy mẫu hàm swap
như được định nghĩa trong thư viện chuẩn:
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!
}
Rõ ràng, phải có khả năng gán cho các đối tượng được di chuyển, nếu không các dòng 2 và 3 sẽ thất bại. Vì vậy, tôi có thể làm gì khác với các đối tượng di chuyển? Chính xác thì tôi có thể tìm thấy những chi tiết này trong tiêu chuẩn ở đâu?
(Nhân tiện, tại sao nó lại T c = std::move(a);
thay vì T c(std::move(a));
trong dòng 1?)
pop_back
chuyển từvector
. Nhưng bạn chắc chắn có thể tìm ra nếu nó làempty()
.