빠른 참조, 특히 현재 향후 C++ 0x 표준 구현과 관련하여 좋은 참조를 찾을 수 없습니다.생성자 이동 및 강력한 예외 보증
move constructors can throw부터 일부 표준 라이브러리 함수가 강력한 예외 보증을 제공 할 수 없다는 것을 의미합니다 (예 : vector<T>::resize()
).
1) 모든 표준 라이브러리 이동 생성자를 "no throw"로 만들고 2) 사용자 코드에 컴파일 시간 검사를 추가하여 예. std::pair<std::string, MyType>
은 nothrow move 생성자 또는 move 생성자를 전혀 정의하지 않습니다.
이 제안은 무엇입니까 (특히 this question과 관련)? 최종 초안에서 문제는 어떻게 "해결"됩니까?
최근 GCC 나 MSVC 10을 사용할 때 무엇이 가장 중요합니까? 이러한 표준 라이브러리의 구현은 예를 들어 강력한 예외 보증을 제공합니까? std::vector<MyTypeWithAThrowingMoveConstructor>::resize()
?
편집 : 나는 명확하게 관련된 this question을 보지 못했습니다. 내 질문이 복제본이라는 사실에 대한 합의가있는 경우이를 닫습니다. 그러나, 나는 실제로 이이 아닌 이 구현 된 것에 관심이있다..
+1 호기심 많은 질문 – sehe
그들은 강력한 예외 보장을 제공 했습니까? 내 말은, 당신의 복사 생성자가 항상 던질 수 있다는 것입니다 ... – Xeo
@Xeo : 예 그들은 그것을했습니다. 모든 복사본이 성공적으로 완료된 후에는 이전 버퍼가 소멸되므로 * 크기 조정 작업을 쉽게 롤백 할 수 있습니다. nothrow move 생성자를 사용하면 요소를 이전 버퍼로 다시 이동하여 롤백 할 수 있습니다. 이동 생성자를 던지면서 나쁜 일이 발생할 수 있습니다. 여기서 우리는 강력한 * noexcept 키워드가 없음을 분명히 알 수 있습니다. –