Toán tử gán (assignment) bao gồm 2 bước: phá hủy trạng thái cũ của đối tượng và xây dựng trạng thái mới cho nó. Destructor dùng cho bước đầu, copy constructor làm bước thứ hai.
Triển khai cả hai khá đơn giản. Nhưng khi nạp chồng toán tử gán, có thể trở nên khó khăn. Idiom copy-and-swap là giải pháp cho vấn đề này.
Idiom này dùng copy-constructor để xây dựng bản sao cục bộ của dữ liệu. Sau đó hoán đổi dữ liệu cũ với dữ liệu mới dùng hàm swap. Bản sao tạm thời sau đó bị hủy bằng destructor. Chúng ta cuối cùng chỉ có bản sao của dữ liệu mới.
Vì vậy, copy-and-swap idiom cần ba thứ:
- copy-constructor
- destructor
- hàm swap.
Hàm swap là hàm không ném ngoại lệ (non-throwing) hoán đổi hai đối tượng của một class, các thành viên.
Lưu ý: Không được dùng std::swap vì nó nội bộ dùng copy constructor và assignment operator để đạt được cùng mục đích.