규칙 3(C++ 프로그래밍)

Rule of three (C++ programming)

규칙 3규칙 5는 예외적으로 안전한 코드를 구축하고 리소스 관리에 대한 규칙을 공식화하기 위한 C++경험칙입니다.규칙은 이러한 목표를 체계적으로 달성하기 위해 클래스의 기본 구성원을 사용하는 방법을 지정합니다.

3의 법칙

3의 법칙(빅3의 법칙 또는 빅3의 법칙이라고도 함)은 C++(C++11보다 이전)의 경험칙으로, 클래스가 다음 중 하나를 정의하면 아마도 이 [1]세 가지를 모두 명시적으로 정의해야 한다고 주장합니다.

이 세 가지 기능은 특별한 멤버 기능입니다.이러한 함수 중 하나가 프로그래머에 의해 먼저 선언되지 않고 사용되는 경우, 다음과 같은 기본 의미론에서 컴파일러에 의해 암묵적으로 구현됩니다.

  • 소멸자 – 모든 객체의 클래스 유형 멤버 소멸자를 호출합니다.
  • Copy Constructor – copy constructor 인수의 대응하는 멤버에서 객체의 모든 멤버를 생성하여 객체의 클래스 유형 멤버의 복사 컨스트럭터를 호출하고 모든 비클래스 유형(예: int 또는 포인터) 데이터 멤버에 대해 플레인 할당을 수행합니다.
  • Copy assignment operator – 할당 연산자 인수의 해당 멤버에서 객체의 모든 멤버를 할당하고 객체의 클래스 유형 멤버의 복사 할당 연산자를 호출하고 모든 비클래스 유형(: int 또는 포인터) 데이터 멤버에 대해 일반 할당을 수행합니다.

이들 중 하나가 프로그래머에 의해 정의되어야 하는 경우 컴파일러가 생성한 버전은 한 경우 클래스의 요구에 맞지 않으며 다른 경우에도 맞지 않을 수 있다는 세 가지 규칙입니다."3의 법칙"이라는 용어는 1991년 [2]마셜 클라인에 의해 만들어졌다.

이 규칙의 수정사항은 모든 (사소한) 멤버에 대해 RAII(Resource Acquisition is Initialization)를 사용하도록 클래스를 설계할 경우 소멸자가 정의되지 않은 상태로 남아 있을 수 있다는 것입니다(더 빅2의[3] 법칙이라고도 함).이 접근방식의 즉석에서 사용할 수 있는 예는 일반 포인터 [3]대신 스마트 포인터를 사용하는 것입니다.

왜냐하면implicitly-generated 생성자와 대입 연산자 단순히 모든 클래스 데이터 멤버("단순 복사본")[4]를 복사하면 그 물건들은 cla에 의해 지적했다 복사할 게 하나거나 포인터 등과 같은 외부 추천을 받아 와 복잡한 데이터 구조에 캡슐화 클래스에 대한 명백한 복사 생성자를 사용하고 복사할 대입 연산자를 정의해야 한다.ss회원들.디폴트 동작(「복사 허용」)이 실제로 의도된 동작인 경우, 명시적인 정의는 용장성이 있지만, 「자기 문서화 코드」가 되어, 그것이 과실이 아니고 의도였음을 나타냅니다.최신 C++에는 함수 본문을 입력할 필요 없이 기본 함수를 사용하는 것을 명시적으로 지정하는 구문이 포함되어 있습니다.

5의 법칙

C++11의 등장으로 3의 규칙은 5의 규칙(일명[5] 빅5의 규칙)으로 확장될 수 있습니다.는 C++11이 이동 [6]시멘틱스를 구현하기 때문에 행선지 객체가 임시 객체의 데이터를 취득(또는 훔침) 수 있기 때문입니다.move constructor 및 move assignment 연산자의 새로운 이동 멤버도 보여줍니다.그 결과, 5명의 룰에 대해서, 다음과 같은 특별 멤버를 참조해당 멤버는 다음과 같습니다.

클래스가 소멸자를 필요로 하지만 복사 및 이동 생성자와 복사 및 이동 할당 연산자를 적절하게 구현할 수 없는 상황이 존재합니다.예를 들어 기본 클래스가 이러한 최신 빅4 멤버를 지원하지 않지만 파생 클래스의 생성자가 메모리를 자체 [citation needed]용도로 할당하는 경우 이 문제가 발생합니다.C++11 에서는, 5개의 멤버를 [7]디폴트로 명시적으로 지정하는 것으로, 이것을 간략화할 수 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ Stroustrup, Bjarne (2000). The C++ Programming Language (3 ed.). Addison-Wesley. pp. 283–4. ISBN 978-0-201-70073-2.
  2. ^ Koenig, Andrew; Barbara E. Moo (2001-06-01). "C++ Made Easier: The Rule of Three". Dr. Dobb's Journal. Retrieved 2009-09-08.
  3. ^ a b Karlsson, Bjorn; Wilson, Matthew (2004-10-01). "The Law of the Big Two". The C++ Source. Artima. Retrieved 2008-01-22.
  4. ^ The C++ Programming Language. p. 271.
  5. ^ "C++11: The Rule of the Big Five" (PDF). Retrieved 4 June 2018.
  6. ^ Stroustrup, Bjarne (2013-04-07). "C++11 - the new ISO C++ standard". Retrieved 2013-05-10.
  7. ^ "The rule of three/five/zero". cppreference.com. Retrieved 15 February 2015.