«move-semantics» 태그된 질문

12
이동 의미 란 무엇입니까?
C ++ 0x 에 관한 Scott Meyers와의 소프트웨어 엔지니어링 라디오 팟 캐스트 인터뷰 를 막 끝냈습니다 . 대부분의 새로운 기능은 제게 이해가되었으며, 실제로는 C ++ 0x를 제외하고는 정말 흥분됩니다. 나는 여전히 이동 의미를 얻지 못한다 ... 정확히 무엇입니까?

7
push_back 및 emplace_back
나는 조금의 차이에 대한 혼란 스러워요 push_back와 emplace_back. void emplace_back(Type&& _Val); void push_back(const Type& _Val); void push_back(Type&& _Val); 가로 push_back과부하 내가 아주의 목적은 무엇 보지 않는를 rvalue 참조 복용 emplace_back되고 있습니까?


6
C ++ 11 rvalue 및 이동 의미 론적 혼란 (return statement)
rvalue 참조를 이해하고 C ++ 11의 의미를 이동하려고합니다. 이 예제들 사이의 차이점은 무엇이며 어떤 것들은 벡터 복사를하지 않을 것입니까? 첫 번째 예 std::vector<int> return_vector(void) { std::vector<int> tmp {1,2,3,4,5}; return tmp; } std::vector<int> &&rval_ref = return_vector(); 두 번째 예 std::vector<int>&& return_vector(void) { std::vector<int> tmp {1,2,3,4,5}; return std::move(tmp); } std::vector<int> &&rval_ref = …

3
"* this에 대한 rvalue 참조"란 무엇입니까?
clang의 C ++ 11 status page 에서 "* r에 대한 rvalue reference"라는 제안을 보았습니다 . rvalue 참조에 대해 꽤 많이 읽고 이해했지만 이것에 대해 알지 못한다고 생각합니다. 또한 용어를 사용하여 웹에서 많은 리소스를 찾을 수 없습니다. 페이지에 제안서에 대한 링크가 있습니다 : N2439 (이동 의미론을 * this로 확장), 그러나 거기에서도 …

2
최신 C ++로 무료 성능을 얻을 수 있습니까?
C ++ 11/14는 단지 C ++ 98 코드를 컴파일 할 때에도 성능을 향상시킬 수 있다고 주장합니다. 정당화는 보통 rvalue 생성자가 자동으로 생성되거나 STL의 일부이므로 이동 시맨틱 라인을 따릅니다. 이제 이러한 사례가 실제로 RVO 또는 유사한 컴파일러 최적화로 이미 처리되었는지 궁금합니다. 내 질문은 수정하지 않고 새로운 언어 기능을 지원하는 컴파일러를 사용하여 …

6
왜 std :: move std :: shared_ptr을 사용합니까?
Clang 소스 코드를 살펴본 결과이 스 니펫을 발견했습니다. void CompilerInstance::setInvocation( std::shared_ptr<CompilerInvocation> Value) { Invocation = std::move(Value); } 왜 내가 원하는 것 ?std::movestd::shared_ptr 공유 리소스에 대한 소유권을 이전 할 수 있습니까? 왜 대신 대신이 작업을 수행하지 않습니까? void CompilerInstance::setInvocation( std::shared_ptr<CompilerInvocation> Value) { Invocation = Value; }

2
이동 된 객체로 무엇을 할 수 있습니까?
표준은 객체가 이동 한 후에 할 수있는 것을 정확하게 정의합니까? 이동 된 객체로 할 수있는 모든 것은 그것을 파괴하는 것이라고 생각했지만 충분하지는 않습니다. 예를 들어 swap표준 라이브러리에 정의 된 함수 템플릿 을 사용하십시오. template <typename T> void swap(T& a, T& b) { T c = std::move(a); // line 1 a …

6
std :: unique_ptr 멤버와 함께 사용자 정의 삭제기를 사용하려면 어떻게합니까?
unique_ptr 멤버가있는 클래스가 있습니다. class Foo { private: std::unique_ptr<Bar> bar; ... }; Bar는 create () 함수와 destroy () 함수가있는 타사 클래스입니다. std::unique_ptr독립형 기능 으로 함께 사용하고 싶다면 다음을 수행 할 수 있습니다. void foo() { std::unique_ptr<Bar, void(*)(Bar*)> bar(create(), [](Bar* b){ destroy(b); }); ... } std::unique_ptr수업의 일원으로서 이것을 할 수있는 방법이 …


4
C ++ 11에서 유형을 이동 불가능하게 만드는 경우
나는 이것이 내 검색 결과에 나타나지 않는다는 것에 놀랐습니다. 나는 C ++ 11에서 이동 의미론의 유용성을 고려할 때 누군가 전에 이것을 물었을 것이라고 생각했습니다. 언제 C ++ 11에서 클래스를 이동 불가능하게 만들어야합니까 (또는 좋은 생각입니까)? (이유는 다른 것입니다 기존 코드와의 호환성 문제보다.)

1
대여 한 콘텐츠 밖으로 이동할 수 없거나 공유 참조 뒤로 이동할 수 없습니다.
오류를 이해하지 못합니다 cannot move out of borrowed content. 나는 그것을 여러 번 받았으며 항상 그것을 해결했지만 그 이유를 결코 이해하지 못했습니다. 예를 들면 : for line in self.xslg_file.iter() { self.buffer.clear(); for current_char in line.into_bytes().iter() { self.buffer.push(*current_char as char); } println!("{}", line); } 오류를 생성합니다. error[E0507]: cannot move out of …

6
이동 할당 연산자 및`if (this! = & rhs)`
클래스의 할당 연산자에서 일반적으로 할당되는 객체가 호출 객체인지 확인해야하므로 문제가 발생하지 않습니다. Class& Class::operator=(const Class& rhs) { if (this != &rhs) { // do the assignment } return *this; } 이동 할당 연산자에 대해 동일한 것이 필요합니까? this == &rhs사실이 될 상황이 있습니까? ? Class::operator=(Class&& rhs) { ? }

3
범위 기반 for 루프에서 전달 참조를 사용하면 어떤 이점이 있습니까?
const auto&읽기 전용 작업을 수행하려면 충분합니다. 그러나 나는 부딪쳤다 for (auto&& e : v) // v is non-const 최근에 몇 번. 이것은 나를 궁금하게 만듭니다. 그것은 몇 가지 모호한 구석 경우에 비해, 전달 참조를 사용하여 약간의 성능 향상이 있음을 가능 auto&또는 const auto&? ( shared_ptr모호한 코너 케이스에 대한 용의자) 즐겨 …

2
std :: move ()는 어떻게 값을 RValues로 전송합니까?
의 논리를 완전히 이해하지 못하고 std::move()있습니다. 처음에는 검색했지만 std::move()구조가 어떻게 작동하는지가 아니라 사용 방법에 대한 문서 만있는 것 같습니다 . 내 말은, 템플릿 멤버 함수가 무엇인지 알고 있지만 std::move()VS2010에서 정의를 살펴보면 여전히 혼란 스럽습니다. std :: move ()의 정의는 다음과 같습니다. template<class _Ty> inline typename tr1::_Remove_reference<_Ty>::_Type&& move(_Ty&& _Arg) { // …

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.