>  기사  >  백엔드 개발  >  이동된 `std::벡터`는 항상 비어 있나요?

이동된 `std::벡터`는 항상 비어 있나요?

Barbara Streisand
Barbara Streisand원래의
2024-11-18 03:36:02832검색

Is a Moved-From `std::vector` Always Empty?

이동된 벡터는 항상 비어 있나요?

C에서 객체를 이동하면 지정되지 않은 상태가 됩니다. 이 규칙에는 벡터에 대한 명시적 제외가 없지만 빈 벡터가 발생하지 않는 실행 가능한 구현을 찾는 것이 어려울 수 있습니다.

이동 생성자

벡터의 이동 생성자는 일정한 복잡성을 가져야 합니다. 이를 위해서는 이동된 벡터에서 리소스를 훔쳐 비어 있는 상태로 남겨두어야 합니다. 따라서 이동 생성자의 경우 이동된 벡터는 항상 비어 있습니다.

이동 할당 연산자

이동 할당 연산자의 동작은 벡터의 할당자에 따라 다릅니다. 세 가지 주요 사례가 있습니다.

사례 1:
Propagate_on_container_move_locationment가 true입니다.

이 경우 파괴, 할당 해제, 할당자 이동 및 메모리 버퍼 전송이 발생합니다. , 이동된 벡터를 그대로 둡니다. 비어 있음.

사례 2:
Propagate_on_container_move_locationment가 false이지만 할당자는 동일합니다.

사례 1과 유사하게 이동된 벡터가 비어 있습니다.

사례 3:
Propagate_on_container_move_locationment가 false이고 할당자가 동일하지 않습니다.

리소스를 직접 전송하는 것은 불가능합니다. 대신 요소를 개별적으로 이동해야 합니다. 이동된 벡터에 이동 생성자가 없는 요소가 포함되어 있으면 비어 있지 않은 상태로 유지됩니다. 그러나 표준에서 요구하는 것은 아니지만 구현 시 선택적으로 v.clear()를 호출하여 비울 수 있습니다.

위 내용은 이동된 `std::벡터`는 항상 비어 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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