Toán tử gán 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. Destructor dùng cho bước 1, copy constructor cho bước 2. Triển khai cả hai đơn giản. Nhưng khi nạp chồng toán tử gán, trở nên khó khăn. Copy-and-swap idiom là giải pháp.
Idiom này dùng copy-constructor tạo bản sao cục bộ của dữ liệu. Sau đó hoán đổi (swap) dữ liệu cũ với dữ liệu mới bằng hàm swap. Bản sao tạm sau đó bị hủy bởi destructor. Kết quả chỉ còn bản sao dữ liệu mới.
Copy-and-swap cần 3 thứ: copy-constructor, destructor, hàm swap. Hàm swap là non-throwing (không ném exception) hoán đổi hai đối tượng cùng lớp. Lưu ý: Không dùng std::swap vì nó nội bộ dùng copy constructor và assignment operator.