>백엔드 개발 >C++ >`if (this != &rhs)` 확인이 이동 할당 연산자에 포함되어야 합니까?

`if (this != &rhs)` 확인이 이동 할당 연산자에 포함되어야 합니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-29 11:55:11666검색

Should the `if (this != &rhs)` Check Be Included in a Move Assignment Operator?

이동 할당 연산자 및 if (this != &rhs)

클래스의 할당 연산자에서는 일반적인 관행입니다. 잠재적인 오류를 피하기 위해 할당되는 개체가 호출하는 개체인지 확인합니다. 이는 if (this != &rhs) 조건을 사용하여 수행됩니다.

그러나 이동 할당 연산자의 맥락에서, 특히 오른쪽(RHS)이 rvalue 참조(예: Class&&), 이 검사가 필요한지 의문이 듭니다.

rvalue 참조는 항상 고유하고 임시 개체를 참조하기 때문에 검사가 필요하지 않다고 주장하는 사람들도 있습니다. 다른 곳에서 별명이 붙었습니다. 이 경우 != &rhs는 항상 참입니다.

표준에서 엄격하게 요구하지는 않지만 방어 수단으로 확인하는 것이 여전히 바람직하다고 주장하는 사람들도 있습니다. 그들은 클라이언트 코드가 실수로 자체 참조를 전달하는 경우 추가적인 보장을 제공하고 잠재적인 버그나 정의되지 않은 동작을 방지한다고 주장합니다.

이동의 맥락에서 검사가 꼭 필요하지는 않다는 것이 일반적인 합의로 보입니다. 할당하지만 해롭지도 않습니다. 널리 사용되는 복사 및 교환 관용구를 사용하여 이동 할당을 구현하는 경우 검사를 포함하는 것이 일반적인 관행입니다. 다만, Copy & Swap 없이 이동 할당을 구현한 경우 체크가 생략될 수 있습니다.

결국 체크 포함 여부는 개인 취향과 디자인 고려 사항입니다.

위 내용은 `if (this != &rhs)` 확인이 이동 할당 연산자에 포함되어야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.