>백엔드 개발 >C++ >C에서 이동된 컨테이너를 어떻게 적절하게 재사용해야 합니까?

C에서 이동된 컨테이너를 어떻게 적절하게 재사용해야 합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-03 02:42:10618검색

How Should You Properly Reuse Moved Containers in C  ?

이동된 컨테이너 재사용: 올바른 접근 방식

C에서 이동한 컨테이너를 재사용한다는 주제가 논의를 불러일으켰습니다. 이 문서에서는 이러한 상황을 처리하는 올바른 방법을 살펴봅니다.

다음 코드 조각을 고려하세요.

std::vector<int> container;
container.push_back(1);
auto container2 = std::move(container);

// ver1: Do nothing
//container2.clear(); // ver2: "Reset"
container = std::vector<int>() // ver3: Reinitialize

container.push_back(2);
assert(container.size() == 1 && container.front() == 2);

C 0x 표준 초안에 따르면 ver3은 이전 이후 선호되는 접근 방식인 것으로 보입니다. 개체는 "유효하지만 지정되지 않은 상태"에 있습니다. 이 개념을 명확히 하기 위해 표준의 정의를 참조해 보겠습니다.

[defns.valid]
§17.3.26     valid but unspecified state

an object state that is not specified except that the object’s invariants are met and operations on the object behave as specified for its type

이것은 이동된 객체가 여전히 살아 있고 전제 조건이 있는 작업을 제외하고(전제 조건이 확인되지 않는 한) 평소와 같이 작동할 수 있음을 의미합니다. 사전에).

예를 들어, clear() 작업에는 전제 조건이 없습니다. Clear()를 사용하면 컨테이너가 정의된 상태로 재설정되어 후속 활용이 가능해집니다.

따라서 이동된 컨테이너를 재사용하는 올바른 방법은 코드 조각. 이 접근 방식을 사용하면 컨테이너가 알려진 일관된 상태로 복원됩니다.

위 내용은 C에서 이동된 컨테이너를 어떻게 적절하게 재사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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