> 백엔드 개발 > C++ > C 11에서 이동된 개체의 유효한 상태는 무엇이며 이를 정의하는 방법은 무엇입니까?

C 11에서 이동된 개체의 유효한 상태는 무엇이며 이를 정의하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-01 18:14:11
원래의
384명이 탐색했습니다.

What are the Valid States of Moved-from Objects in C  11 and How to Define Them?

C 11에서 이동된 개체의 유효한 상태 이해

C 11의 이동 의미 체계는 중요한 개념을 소개합니다. 에서 옮겨지고 있습니다. 그러나 이동된 객체가 충족해야 하는 정확한 조건은 혼란스러울 수 있습니다.

The Issue with pimpl Objects

클래스가 객체를 래핑하는 pimpl 관용어를 생각해 보세요. 구현 개체에 대한 포인터입니다. Foo 객체(std::unique_ptr 포함)에서 이동하면 나중에 어떻게 할 수 있나요?

  • 파기하거나 할당해도 안전합니다.
  • (구현 포인터를 통해) 멤버 함수를 호출하는 것은 삭제된 함수를 참조할 수 있기 때문에 문제가 있습니다. object.

표준 라이브러리 이동 상태

C 표준은 표준 라이브러리 유형의 이동 개체가 "지정되지 않았지만 유효한 상태"에 배치되도록 정의합니다. 상태." 즉, 유효한 전제 조건이 있는 경우 작업을 수행할 수 있습니다.

단, 비표준 유형의 경우 이동 후 허용되는 유효한 상태와 작업을 정의하고 문서화해야 합니다.

pimpl의 유효한 상태 정의

Foo 예에서 Foo에서 이동하면 do_stuff 함수가 잘못되었습니다. 이렇게 하면 이동된 개체에서 실수로 호출하는 것을 방지할 수 있습니다.

동적 할당 방지

유효한 상태를 확인할 때 동적 할당의 오버헤드를 방지하려면 다음을 고려하세요. "null 개체" 패턴을 사용합니다. 여기에는 객체가 유효하지 않은 상태에 있을 때 사용되는 기본 FooImpl이 포함됩니다.

개념 및 이동된 객체

마지막으로 이동된 객체에 유의하세요. 여전히 표준 라이브러리 개념의 요구 사항을 충족해야 합니다. 유형이 유효한 상태로 유지되지 않는 경우 표준 라이브러리 함수와 함께 사용하면 정의되지 않은 동작이 발생할 수 있습니다.

위 내용은 C 11에서 이동된 개체의 유효한 상태는 무엇이며 이를 정의하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿