할당 연산자 이동
Move assignment operatorC++ 프로그래밍 언어에서 이동 할당 연산자 =
는 임시 개체를 기존 개체로 전송하기 위해 사용됩니다.이동 할당 연산자는 대부분의 C++ 연산자와 마찬가지로 오버로드될 수 있습니다.복사 할당 연산자와 마찬가지로 특수 멤버 기능입니다.
이동 할당 연산자가 명시적으로 정의되지 않은 경우 복사/이동 생성자, 복사 할당 연산자 또는 소멸자가 [1]선언되지 않은 경우 컴파일러는 암묵적인 이동 할당 연산자(C++11 이후)를 생성합니다.Move Assignment 연산자의 파라미터는 Type T에 대한 rvalue reference(T&;)입니다.T는 Move Assignment 연산자를 정의하는 객체입니다.이동 할당 연산자는 이동 할당 연산자가 기존 개체에서 호출되는 반면 이동 생성자는 작업에서 만든 개체에서 호출되므로 이동 할당 연산자는 이동 생성자와 다릅니다.이후 다른 개체의 데이터는 더 이상 유효하지 않습니다.
이동 할당 연산자를 오버로드하는 중
이동 할당 연산자를 오버로드하려면 함수의 시그니처가 [1]다음과 같아야 합니다.
T& 교환입니다.=(T& & 데이터.)
이동 할당 연산자를 성공적으로 오버로드하려면 다음 조건을 충족해야 합니다.
- 오퍼레이터를 호출하는 오브젝트가 오퍼레이터를 호출하고 있지 않은지 확인합니다.
- 현재 개체의 데이터가 할당 해제되었습니다.
- 이동 중인 개체에는 해당 데이터가 nullptr(또는 이동을 나타내는 것)로 표시되어 있어야 합니다.
- 연산자는 "*this"에 대한 참조를 반환해야 합니다.
단순 문자열 [2]클래스의 경우 다음 이동 할당 연산자를 고려합니다.
학급 스트링 { 일반의: 스트링& 교환입니다.=(스트링& & 다른.) 예외 없음 { // 오브젝트를 이동하지 않으면... 한다면 (이것. != &다른.) { 삭제하다[] 이것.->데이터_; // 이 문자열의 원래 데이터를 해제합니다. 이것.->데이터_ = 다른..데이터_; // 다른 문자열의 데이터 포인터를 이 문자열에 복사합니다. 다른..데이터_ = 특수; // 마지막으로 다른 문자열의 데이터 포인터를 리셋합니다. } 돌아가다 *이것.; } 사적인: 차* 데이터_; };
레퍼런스
- ^ a b "Move assignment operator - cppreference.com". en.cppreference.com. Retrieved 2016-02-23.
- ^ "Move Constructors and Move Assignment Operators (C++)". msdn.microsoft.com. Retrieved 2016-02-23.