할당은 객체의 이전 상태를 제거하고 새 상태를 구축하는 2단계로 구성됩니다. 소멸자는 첫 번째 단계에 사용되고 복사 생성자는 두 번째 단계에 사용됩니다. 이 두 가지를 모두 구현하는 것은 간단합니다. 그러나 할당 연산자를 오버로드하면 구현하기가 상당히 어려울 수 있습니다. 복사 및 교체 관용구가 동일한 솔루션입니다.
이 관용구는 복사 생성자를 사용하여 데이터의 로컬 복사본을 만듭니다. 그런 다음 스왑 기능을 사용하여 이전 데이터를 새 데이터로 교체합니다. 임시 복사본은 소멸자를 사용하여 소멸됩니다. 마침내 우리는 새로운 데이터의 복사본만을 갖게 되었습니다.
따라서 copy-and-swap 관용구에는 복사 생성자, 소멸자 및 스왑 기능의 세 가지가 필요합니다. 스왑 함수는 멤버 클래스의 두 개체를 교환하는 던지지 않는 함수입니다. 참고 - 내부적으로 복사 생성자와 할당 연산자를 사용하여 동일한 결과를 얻으므로 std::swap 함수를 사용하면 안 됩니다.