>백엔드 개발 >C++ >C에서는 이동된 벡터가 항상 비어 있습니까?

C에서는 이동된 벡터가 항상 비어 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-17 17:34:02612검색

Are Moved-From Vectors Always Empty in C  ?

이전된 벡터의 공허함: 옵션 탐색

C 프로그래밍 영역에서 벡터는 다양한 용도로 활용되는 다양한 데이터 구조입니다. 효율적인 메모리 관리 그러나 이동된 벡터의 동작을 이해하는 데 있어서 프로그래머는 벡터의 공허함에 대한 질문에 직면할 수 있습니다.

표준 정의 및 요구 사항

C 표준은 다음을 제공합니다. N3485 17.6.5.15에 명시된 대로 개체를 이동한 후 개체의 동작에 대한 지침 [lib.types.movedfrom]/1:

"C 표준 라이브러리에 정의된 유형의 개체는 (12.8)에서 이동할 수 있습니다. 이동 작업은 명시적으로 지정되거나 암시적으로 생성될 수 있습니다. 달리 지정하지 않는 한 이러한 이동 작업은 -from 객체는 유효하지만 지정되지 않은 상태에 배치되어야 합니다."

이 조항은 벡터를 명시적으로 제외하지는 않지만 벡터에 대한 구체적인 지침도 제공하지 않습니다.

이동 생성자 검사

벡터의 이동 생성자, vector::벡터(벡터&&v)는 다음을 수행하는 데 필요합니다. 지속적인 복잡성을 가지고 있습니다. 이를 위해서는 소스 벡터 v에서 새 벡터 *this로 리소스를 전송해야 하며 v는 빈 상태가 됩니다.

이동 할당 및 할당자 영향 탐색

The 이동 할당 연산자, 벡터& 벡터::operator=(벡터&&v)는 더 복잡하며 벡터 할당자의 영향을 받습니다. 세 가지 시나리오가 나타납니다.

  1. 할당자 전파 활성화:
    allocator_traits::propagate_on_container_move_assement::value가 true인 경우 이동 할당 연산자는 요소와 메모리 할당을 해제하고, v의 소유권을 갖고 두 벡터를 모두 남깁니다. 비어 있음.
  2. 할당자 전파 비활성화됨(동일 할당자):
    이전 사례와 유사하게 이동 할당 연산자는 사례 1과 유사하지만 할당자를 그대로 유지합니다. 그러나 동일한 패턴을 따르므로 빈 벡터가 생성됩니다.
  3. 할당자 전파 비활성화(다른 할당자):
    이 경우 이동 할당은 리소스를 이동할 수 없으며 이동에 의지합니다. 요소를 개별적으로. 이를 위해서는 요소를 이동 할당하거나 복사 할당할 수 있는 기능이 필요하며, 잠재적으로 이동 원본 벡터 v에는 이동 원본 요소가 포함되어 있습니다. 일부 구현에서는 v를 명시적으로 지우도록 선택할 수 있지만 표준에서는 이를 의무화하지 않습니다.

결론

벡터는 일반적으로 이동된 후 비어 있지만 할당자의 동작과 할당 요소를 이동하거나 복사하는 기능에 따라 예외가 있습니다. 구현은 이동된 개체에 대한 일반적인 요구 사항을 준수하는 한 다양한 접근 방식을 자유롭게 채택할 수 있습니다. 프로그래머가 C 애플리케이션에서 벡터 및 이동 의미론으로 작업할 때 이러한 시나리오를 이해하는 것이 중요합니다.

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

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