Trong C++ 11, chúng ta có thể có được một sự gia tăng hiệu quả bằng cách sử dụng std::move
khi chúng ta muốn di chuyển (triệt tiêu copy) giá trị vào một container:C++ "di chuyển từ" container
SomeExpensiveType x = /* ... */;
vec.push_back(std::move(x));
Nhưng tôi không thể tìm mọi thứ theo cách khác. Ý của tôi là gì đó như sau:
SomeExpensiveType x = vec.back(); // copy!
vec.pop_back(); // argh
Điều này thường xuyên hơn (bản sao) trên bộ điều hợp như stack
. Có thể có nội dung như thế này:
Để tránh sao chép? Và điều này đã tồn tại? Tôi không thể tìm thấy bất cứ điều gì như thế trong n3000.
Tôi có cảm giác mình đang thiếu một cái gì đó đau đớn rõ ràng (như sự thiếu thốn của nó), vì vậy tôi chuẩn bị cho "ru dum". : 3
Phương pháp di chuyển có những biến nào nằm ngoài phạm vi? Ví dụ, nếu tôi tạo một đối tượng, thêm nó vào một thùng chứa thành viên, thì đối tượng đó nằm ngoài phạm vi ... Vì không có bản sao nào được tạo ra, là đối tượng trong thùng chứa thành viên vẫn được định nghĩa? – Polaris878
Có, nó đã được chuyển vào thùng chứa. Bạn sẽ muốn tham khảo google rvalue nếu bạn không chắc chắn cách chúng hoạt động. – GManNickG
cảm ơn ngọt ngào ... Tôi sẽ phải đào sâu vào điều này một số lol. Tại mệnh giá có vẻ như điều này sẽ gây ra vấn đề. – Polaris878