C ++ 핵심 원칙 C.84 : 스왑 기능이 실패해서는 안

C.84, • 스왑 기능이 실패하지 않을 수 있습니다

C.84 : 스왑 기능이 실패해서는 안

 

 

이유 (이유)

 

 

스왑 널리 실패 결코 및 프로그램은 쉽게 실패 스왑의 존재 제대로 작동하려면 기록 할 수없는 가정 방법으로 사용된다. 요소 유형의 교체가 실패 할 경우 표준 라이브러리 컨테이너와 알고리즘은 제대로 작동하지 않을 수 있습니다.

 

 

스왑 기능이 널리 사용되는 방법은 프로그램의 정상적인 작동을 교환도 할 수있는이 실패하지 않을 것이라는 점을 가정뿐만 아니라 어려운 쓰기 오류이다. 요소 실패를 전환 할 때 표준 라이브러리 컨테이너와 알고리즘이 제대로 작동하지 않을 수 있습니다.

 

Example, bad(反面示例)

 

void swap(My_vector& x, My_vector& y)
{
   auto tmp = x;   // copy elements
   x = y;
   y = tmp;
}

이것은 단지 느린 아니라, 메모리 할당은 TMP의 요소가 발생했을 경우,이 스왑 던질 수 있고, 그들과 함께 사용되는 경우 STL 알고리즘이 실패 할 것입니다.

이 코드의 문제뿐만 아니라 느리지 만하면 메모리 애플리케이션 당신이 그것을 사용하는 경우,이 스왑이 예외를 발생 및 STL 알고리즘이 실패 할 수 발생 TMP 요소 때문이다.

 

 

  시행 (제안)

 

 

(단순) 클래스가 스왑 멤버 함수가있는 경우,이 선언 noexcept해야한다.

 

클래스가 스왑 멤버 함수가 포함되어있는 경우 (단순)는, 그것은 noexcept로 선언되어야한다.

 

 

설명 링크

 

 

 

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c84-a-swap-function-may-not-fail

 

 


 

이 기사가 도움이 생각? 에 오신 것을 환영합니다 엄지 손가락은 더 많은 사람들과 공유 할 수 있습니다.

더 업데이트 된 기사를 읽고, 객체 지향 사고의 마이크로 채널 대중 번호로하시기 바랍니다에주의 []

게시 된 408 개 원래 기사 · 원 찬양 653 · 전망 290 000 +

추천

출처blog.csdn.net/craftsman1970/article/details/104882804