Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 3법칙 대 5법칙?


3의 법칙은 C++를 사용할 때의 경험 법칙입니다. 이것은 수업에 다음 중 하나가 필요한 경우

  • 복사 생성자,
  • 할당 연산자,
  • 또는 소멸자,

명시적으로 정의된 경우 이 세 가지가 모두 필요할 수 있습니다.

왜 이런거야? 클래스에 위의 항목 중 하나가 필요한 경우 동적으로 할당된 리소스를 관리하고 있고 이를 성공적으로 달성하기 위해 다른 리소스가 필요할 수 있기 때문입니다. 예를 들어 할당 연산자가 필요한 경우 현재 참조로 복사되고 있는 개체의 복사본을 만들어 리소스를 할당하게 됩니다. 복사를 위한 복사 생성자와 이러한 리소스를 해제하기 위한 소멸자가 필요합니다.

5법칙은 C++11에 이동 의미론이 도입되었기 때문에 3법칙을 확장한 것입니다. 5의 규칙은 리소스 관리를 위해 C++에서도 적용됩니다. 이 규칙은 C++ 코드에서 메모리 누수 및 기타 문제를 잠재적으로 제거합니다. Big Five의 규칙에 따르면 다음 기능 중 하나를 작성해야 하는 경우 모든 기능에 대한 정책이 있어야 합니다. 객체 Foo가 있으면 리소스 Foo를 처리하는 FooManager를 가질 수 있습니다. FooManager를 구현할 때 다음 기능을 구현해야 할 것입니다. -

  • 소멸자 - 이 관리자가 범위를 벗어나면 관리하고 있던 모든 리소스를 해제해야 합니다.

  • 할당 연산자 - 제공하지 않으면 컴파일러에서 기본 할당 연산자를 만듭니다. 기본 할당 작업은 멤버별 복사 기능이며 전체 복사가 아닌 얕은 복사를 수행합니다. 메모리 누수, 잘못된 할당과 같은 문제가 발생할 수 있습니다.

  • 복사 생성자 - 컴파일러에서 제공하는 복사 생성자는 모든 FooManagers 속성의 구성원별 복사를 수행합니다. 이것은 할당 연산자와 동일한 문제를 야기합니다.

  • 이동 생성자 - 객체를 복사하는 것은 임시 객체를 생성, 복사 및 파기해야 하기 때문에 비용이 많이 들 수 있습니다. C++11은 r-값 참조의 개념을 도입했습니다. r-값 참조는 r-값에 명시적으로 바인딩될 수 있습니다. r-값은 이름 없는 개체입니다. 즉, 임시 개체입니다. 이 r-값 참조는 전달된 r-값에 대한 참조를 생성하기 위해 생성자에서 사용할 수 있습니다.

  • 이동 생성자 - 객체를 복사하는 것은 임시 객체를 생성, 복사 및 파기해야 하기 때문에 비용이 많이 들 수 있습니다. C++11은 r-값 참조의 개념을 도입했습니다. r-값 참조는 r-값에 명시적으로 바인딩될 수 있습니다. r-값은 이름 없는 개체입니다. 즉, 임시 개체입니다. 이 r-값 참조는 전달된 r-값에 대한 참조를 생성하기 위해 생성자에서 사용할 수 있습니다.

  • 이동 할당 연산자 - 한 번에 하나의 리소스만 갖는 것이 유용합니다. 이 리소스의 소유권은 한 관리자에서 다른 관리자로 이전될 수 있습니다. 이러한 경우 이동 할당 연산자를 제공할 수 있습니다.

이것은 5의 법칙에 대해 배울 수 있는 훌륭한 리소스입니다. https://www.feabhas.com/sites/default/files/2016-06/Rule%20of%20the%20Big%20Five.pdf.