"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > C++11에서 이동 생성자와 이동 할당 연산자는 언제 자동으로 생성됩니까?

C++11에서 이동 생성자와 이동 할당 연산자는 언제 자동으로 생성됩니까?

2024년 12월 26일에 게시됨
검색:854

When Are Move Constructors and Move Assignment Operators Automatically Generated in C  11?

이동 연산의 자동 생성

C 11에서 이동 의미론의 도입은 이동 생성자와 이동 할당이 이루어지는 상황에 대한 의문을 제기했습니다. 연산자는 자동으로 생성됩니다.

C 11에서는 복사 생성자 및 복사 할당 연산자처럼 이동 작업이 자동으로 생성되지 않습니다. 컴파일러는 특정 조건이 충족되는 경우에만 이동 의미 체계를 생성합니다.

  • 사용자 정의 복사 생성자 또는 복사 할당 연산자가 없습니다. 이러한 멤버 중 하나라도 명시적으로 정의된 경우 이동이 없습니다. 작업이 생성됩니다.
  • 사용자 정의 소멸자가 정의되지 않았습니다. 소멸자를 정의하면 이동 생성이 비활성화됩니다. 의미 체계.
  • 클래스에 복사할 수 없는 멤버가 없습니다. 동적으로 할당된 메모리에 대한 포인터와 같이 클래스에 이동할 수 없는 멤버가 포함된 경우 이동 작업이 생성되지 않습니다.

이러한 규칙을 이해하면 이동 의미론을 활용하는 클래스 구현을 안내하는 데 도움이 됩니다. Howard Hinnant 프레젠테이션의 표는 이동 작업을 포함하여 특수 멤버의 자동 생성에 대한 간략한 개요를 제공합니다.

생성되지 않음없음 생성됨생성되지 않음생성자 복사 및 생성자 이동 및 할당 연산자 이동생성되지 않음생성되지 않음생성됨복사 할당 연산자 및 이동 생성자 & 이동 할당 연산자생성되지 않음생성되지 않음생성됨
선언복사 생성자복사 할당 연산자생성자 이동 및 할당 이동 연산자
없음생성됨생성됨생성되지 않음
복사 생성자아님 생성됨생성됨생성되지 않음
복사 할당 연산자생성되지 않음생성되지 않음 생성되지 않음
이동 생성자생성되지 않음생성되지 않음생성되지 않음
이동 할당 연산자생성되지 않음생성되지 않음생성되지 않음 생성됨
소멸자생성되지 않음생성되지 않음생성되지 않음
복사 생성자 및 복사 할당 연산자생성되지 않음Not 생성됨생성되지 않음
복사 생성자 및 이동 생성자생성되지 않음생성되지 않음생성되지 않음
생성자 복사 및 할당 이동 연산자생성되지 않음생성되지 않음생성되지 않음
복사 할당 연산자 및 이동 생성자Not 생성됨생성되지 않음생성되지 않음 생성됨
복사 할당 연산자 및 이동 할당 연산자생성되지 않음생성되지 않음생성되지 않음
생성자 및 소멸자 이동아니요 생성됨생성되지 않음생성되지 않음
이동 할당 연산자 및 소멸자생성되지 않음생성되지 않음 생성되지 않음
복사 생성자 및 복사 할당 연산자 및 이동 생성자생성되지 않음생성되지 않음생성되지 않음
복사 생성자 및 복사 할당 연산자 이동 할당 연산자(&&&]
이러한 규칙을 인식함으로써 개발자는 다음을 수행할 수 있습니다. 해당 클래스가 이동 의미론을 적절하게 활용하고 최적의 효율성을 달성합니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3