Cách chính xác để sử dụng lại thùng đã chuyển là gì?
std::vector<int> container;
container.push_back(1);
auto container2 = std::move(container);
// ver1: Do nothing
//container2.clear(); // ver2: "Reset"
container = std::vector<int>() // ver3: Reinitialize
container.push_back(2);
assert(container.size() == 1 && container.front() == 2);
Từ những gì tôi đã đọc trong bản nháp tiêu chuẩn C ++ 0x; ver3 dường như là một cách chính xác, vì một đối tượng sau khi di chuyển là trong một
"Trừ khi có quy định khác, các đối tượng được chuyển đến đó sẽ được đặt ở trạng thái hợp lệ nhưng không xác định."
Tôi chưa bao giờ tìm thấy bất kỳ trường hợp nào mà nó được "chỉ định khác".
Mặc dù tôi thấy ver3 hơi vòng vo và sẽ có nhiều ưu tiên cho ver1 hơn, mặc dù vec3 có thể cho phép tối ưu hóa bổ sung, nhưng mặt khác có thể dễ dẫn đến sai lầm.
Giả định của tôi có đúng không?
clear
, vì nó không có điều kiện tiên quyết (và do đó không phụ thuộc vào trạng thái của đối tượng).