이동 할당 연산자 및 if (this != &rhs)
클래스의 복사 할당 연산자에서는 일반적입니다. 할당된 개체가 방지할 호출 개체인지 확인하려면 자체 할당:
Class& Class::operator=(const Class& rhs) { if (this != &rhs) { // Do the assignment } return *this; }
이 검사는 개체가 자신에게 할당되어 예기치 않은 동작이나 오류가 발생하는 것을 방지하는 데 중요합니다. 그런데 이동 할당 연산자의 경우 이 검사의 필요성이 논란의 여지가 있습니다.
이동 할당 연산자에도 동일한 검사가 필요한가요?
Class& Class::operator=(Class&& rhs) { if (this != &rhs) { // Do the assignment } return *this; }
이동 할당 연산자에 대해 == &rhs가 참인 상황이 있을 수 있는지에 대한 의문이 제기됩니다. 대답은 이동 할당 연산자의 해석에 따라 다릅니다.
이동 할당 연산자의 해석:
이동 할당 연산자에는 두 가지 주요 해석이 있습니다.
현재 및 미래 표준:
The C 11 표준은 이동 할당 연산자의 특정 해석을 명시적으로 요구하지 않습니다. 그러나 프로그래머는 이동 할당 연산자의 구현을 통해 동작을 정의할 수 있습니다.
제안된 C 20 작업 초안에는 자체 이동 할당이 충돌해서는 안 된다고 제안하는 이동 할당에 대한 섹션이 포함되어 있지만 현재 값을 유지해야 하는지 아니면 객체를 유효하지만 지정되지 않은 상태로 남겨 두어야 하는지 지정하지 않습니다. state.
결론:
이동 할당 연산자에서 if(this != &rhs) 검사의 필요성은 해석과 특정 구현 요구 사항의 문제입니다. 자체 이동 할당이 현재 값을 유지할 것으로 예상되는 경우 확인이 필요합니다. 그렇지 않은 경우 최적화를 위해 생략할 수 있습니다.
위 내용은 C 이동 할당 연산자에서 `if (this != &rhs)` 확인이 필요합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!