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