«move-semantics» 태그된 질문

4
복사 한 다음 이동하는 이유는 무엇입니까?
누군가가 객체를 복사하여 클래스의 데이터 멤버로 옮기기로 결정한 코드를 보았습니다. 이로 인해 이동의 요점이 복사를 피하는 것이라고 생각했기 때문에 혼란 스러웠습니다. 다음은 그 예입니다. struct S { S(std::string str) : data(std::move(str)) {} }; 내 질문은 다음과 같습니다. 왜 우리는 rvalue 참조를받지 str않습니까? 사본은 특히 비싸지 std::string않습니까? 저자가 사본을 만들고 이동하기로 …

8
initializer_list 및 이동 의미 체계
요소를 외부로 이동할 수 std::initializer_list<T>있습니까? #include <initializer_list> #include <utility> template<typename T> void foo(std::initializer_list<T> list) { for (auto it = list.begin(); it != list.end(); ++it) { bar(std::move(*it)); // kosher? } } 때문에 std::intializer_list<T>특별한 컴파일러주의가 필요하며 C ++ 표준 라이브러리의 일반 컨테이너와 같은 값의 의미가없는, 내가 오히려 미안한 것보다 안전한 물어 것입니다.

5
이동 전용 유형의 벡터를 나열 초기화 할 수 있습니까?
GCC 4.7 스냅 샷을 통해 다음 코드를 전달하면 unique_ptrs를 벡터 에 복사하려고합니다 . #include <vector> #include <memory> int main() { using move_only = std::unique_ptr<int>; std::vector<move_only> v { move_only(), move_only(), move_only() }; } 분명히 std::unique_ptr복사 할 수 없기 때문에 작동 하지 않습니다. 오류 : 삭제 된 함수 'std :: unique_ptr <_Tp, …

3
벡터가 커질 때 이동 의미론을 적용하는 방법은 무엇입니까?
나는이 std::vector특정 클래스의 객체를 A. 클래스는 사소하지 않으며 복사 생성자 와 이동 생성자가 정의되어 있습니다. std::vector<A> myvec; A객체로 벡터를 채우면 (예 :) 벡터의 요소의 새 사본을 인스턴스화 myvec.push_back(a)하는 복사 생성자 A( const A&)를 사용하여 벡터의 크기가 커집니다 . 클래스의 이동 생성자가 A대신 사용 되도록 어떻게 든 강제 할 수 있습니까 …

4
기본 이동 할당 / 이동 생성자가없는 이유는 무엇입니까?
저는 단순한 프로그래머입니다. 내 클래스 멤버 변수는 대부분 POD 유형과 STL 컨테이너로 구성됩니다. 이 때문에 기본적으로 구현되는 할당 연산자 나 복사 생성자를 거의 작성할 필요가 없습니다. 여기에 std::move움직일 수없는 물체에 사용하면 할당 연산자를 활용하므로 std::move완벽하게 안전합니다. 나는 단순한 프로그래머이기 때문에 컴파일러가 단순히 " this->member1_ = std::move(other.member1_);..." 로 구현할 수 있었기 …

2
이미 구성된 객체에 대한 std :: move 대 emplace_back ()을 사용한 C ++ 11 push_back ()의 ​​효율성
C ++ 11 emplace_back()에서는 일반적으로 push_back()내부 생성을 허용하므로 효율성 측면에서 선호 되지만 push_back(std::move())이미 생성 된 객체와 함께 사용하는 경우에도 마찬가지 입니까? 예를 들어, emplace_back()다음과 같은 경우에 여전히 선호됩니까? std::string mystring("hello world"); std::vector<std::string> myvector; myvector.emplace_back(mystring); myvector.push_back(std::move(mystring)); // (of course assuming we don't care about using the value of mystring after) 또한 …

3
이동 한 컨테이너를 재사용 하시겠습니까?
이동 된 컨테이너를 재사용하는 올바른 방법은 무엇입니까? 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은 올바른 방법 인 것 같습니다. 이동 …

5
RValue Reference (&&)의 반환이 유용한 경우가 있습니까?
함수 가 RValue 참조를 반환해야하는 이유가 있습니까? 기술, 트릭, 관용구 또는 패턴? MyClass&& func( ... ); 일반적 으로 참조 를 반환 하는 위험을 알고 있지만 때때로 우리는 어쨌든 그렇게합니다. 그렇지 않습니까? T& T::operator=(T)관용적 인 예입니다. 하지만 T&& func(...)어때요? 그렇게함으로써 얻을 수있는 일반적인 장소가 있습니까? 클라이언트 코드와 비교하여 라이브러리 또는 API …


4
std :: map의 키에서 리소스를 훔치는 것이 허용됩니까?
C ++에서는 나중에 더 이상 필요하지 않은 맵에서 리소스를 훔치는 것이 괜찮습니까? 더 정확하게 말하면 std::mapwith std::string키가 있고를 map사용하여 s 키 의 리소스를 훔쳐서 벡터를 구성하려고 한다고 가정 합니다 std::move. 키에 대한 이러한 쓰기 액세스는 내부 데이터 구조 (키 순서)를 손상 map시키지만 나중에 사용하지는 않습니다. 질문 : 문제 없이이 작업을 …
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.