C 11에서 이동된 객체의 유효성
C 11에서 객체가 이동되면 상태가 불특정화되어 의문이 제기됩니다. 나중에 어떤 작업을 수행할 수 있는지에 대해 설명합니다. 표준 라이브러리 유형은 유효하지만 지정되지 않은 상태로 이동하는 반면, 사용자 정의 유형은 이동된 후 유효한 상태를 확인하기 위해 명시적인 정의가 필요합니다.
구현이 포인터 뒤에 숨겨져 있는 pimpl 객체의 경우, 질문이 생깁니다: pimpl 포인터가 멀리 이동되면 Foo 객체로 무엇을 할 수 있습니까? 이동한 개체를 삭제하거나 재할당하는 것은 안전하게 유지되지만 pimpl 포인터가 유효하지 않기 때문에 do_stuff와 같은 작업 시도는 실패합니다.
표준 설계에서는 이동한 개체에 대해 지정되지 않은 상태를 허용하여 보수적인 접근 방식을 권장합니다. 다양한 라이브러리에 걸쳐 효율적인 구현. 이를 위해서는 작업을 수행하기 전에 개체의 상태를 쿼리해야 하며, 특히 이동 작업 빈도가 높은 시나리오에서는 성능 오버헤드가 발생할 수 있는 작업입니다.
이러한 쿼리가 필요하지 않도록 사용자 정의 유형을 사용할 수 있습니다. 이동된 후 유효한 상태를 명시적으로 지정합니다. 예를 들어, pimpl 클래스는 그 클래스에서 이동하면 정의되지 않은 동작으로 do_stuff가 유효하지 않게 렌더링된다고 선언할 수 있습니다. 이 접근 방식을 통해 사용자는 객체에서 이동할 때 발생할 수 있는 결과를 인식하고 잠재적인 오류를 방지할 수 있습니다.
이동된 객체는 여전히 표준 라이브러리에서 정의한 모든 개념의 요구 사항을 충족해야 한다는 점에 주목할 가치가 있습니다. 이는 이전 상태를 설명하지 않습니다. 따라서 관련 개념에 정의된 대로 유효한 상태를 유지하지 않는 사용자 정의 유형은 정의되지 않은 동작의 위험 없이 표준 라이브러리와 함께 사용할 수 없습니다.
위 내용은 C 11에서 이동된 객체로 무엇을 할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!