Ở đây có hai điểm:
1) Đối với bất kỳ loại gán, hoán đổi có thể được xác định theo phân công. Điều này đòi hỏi ba nhiệm vụ, mỗi nhiệm vụ, đối với một loại container, là tuyến tính trong kích thước của vùng chứa. Trong một ý nghĩa, sau đó, a.swap (b) là dư thừa. Nó tồn tại chỉ vì lợi ích của hiệu quả: đối với nhiều thùng chứa, chẳng hạn như vectơ và danh sách, có thể thực hiện hoán đổi sao cho độ phức tạp thời gian chạy của nó là không đổi thay vì tuyến tính. Nếu điều này là có thể cho một số loại container X, sau đó hoán đổi chuyên môn mẫu (X &, X &) có thể được viết đơn giản dưới dạng X :: swap (X &). Hàm ý của điều này là X :: swap (X &) chỉ nên được xác định nếu có tồn tại hằng số thời gian thực hiện. Không phải mọi lớp chứa X cần phải có một hàm thành viên như vậy, nhưng nếu hàm thành viên tồn tại ở tất cả thì nó được đảm bảo là thời gian cố định được phân bổ.
2) nếu bạn cần một container trong đó có yếu tố tương tự mà bạn muốn chuyển quyền sở hữu Hãy tạo một bản sao đơn giản cho hiệu quả tốt hơn
mặt lưu ý: "hoán đổi" đã được đề cập rồi. Nhưng tôi muốn thêm rằng trong C + + 0x bạn chỉ có thể thay thế "OvertakeContents" với "std :: move" và nó sẽ làm những gì bạn muốn. – sellibitze