auto_ptr 예제

그래서 표준 위원회는 당신을 도울 수있는 모든 것을 할 수있는 거꾸로 구부려 : 표준 auto_ptr은 표준 용기와 함께 사용하려고하면 의도적으로 특별히 설계되었습니다 (또는, 적어도, 가장 자연과 휴식 표준 라이브러리의 구현)을 참조하십시오. 이를 위해 위원회는 auto_ptr의 복사 생성자 및 복사 할당 연산자가 오른쪽 개체에 대한 비 const에 대한 참조를 취하는 트릭을 사용했습니다. 표준 컨테이너의 단일 요소 삽입() 함수는 const를 참조하므로 auto_ptrs에서는 작동하지 않습니다. 예 9: const auto_ptr 관용구 // const auto_ptr pt1 (new T); // 만드는 pt1 const 는 pt1이 다른 auto_ptr에 복사되지 않을 수 있음을 보장하고 // 그래서 소멸자가 pimpl_ pp를 삭제하는 것에 대해 걱정할 필요가 없습니다. auto_ptr이 자동으로 처리하기 때문입니다. 실제로 소멸기를 명시적으로 작성할 다른 이유가 없다면 사용자 지정 소멸기를 더 이상 귀찮게 할 필요가 없습니다. 분명히 이것은 포인터를 수동으로 관리하는 것보다 쉬울 수 있으며 auto_ptr이 수행하는 데 적합한 작업인 개체에서 리소스 소유권을 래핑하는 것이 좋습니다. 이 예제는 마지막에 다시 살펴보겠습니다. auto_ptr은 복사 의미 체계로 인해 작업에서 요소 복사본을 수행할 수 있는 STL 컨테이너에서 사용할 수 없습니다. 일상 업무에서 auto_ptr과 같은 스마트 포인터를 사용하는 습관을 만드십시오. auto_ptr은 일반적인 문제를 깔끔하게 해결하고 특히 리소스 누수 방지 및 강력한 예외 안전 보장과 관련하여 코드를 보다 안전하고 강력하게 만듭니다. 표준이기 때문에 라이브러리와 플랫폼 에서 이식할 수 있으므로 코드를 어디에 있든 바로 사용할 수 있습니다.

이 문서의 끝에서 auto_ptr을 반환하는 것이 중요한 숙어인 이유를 설명합니다. auto_ptr과 같은 것으로 래핑하여 결과를 반환하는 것이 함수를 강력하게 예외로 만드는 유일한 방법이라는 것이 밝혀졌습니다. auto_ptr은 C++ 표준 라이브러리의 이전 버전에서 사용할 수 있는 클래스 템플릿입니다( 헤더 파일에 선언됨)은 C++ 원시 포인터에 대한 몇 가지 기본 RAII 기능을 제공합니다. 고유_ptr 클래스로 대체되었습니다. auto_ptr에는 일반 포인터와 동일한 인터페이스가 있습니다. 연산자 * 개체를 참조하고 개체가 클래스 또는 구조인 경우 멤버에 대한 액세스를 제공합니다 . 이를 염두에 두고 auto_ptr이 소스 및 싱크와 얼마나 잘 작동하는지 보기 시작합니다. „원본”은 새 리소스를 생성한 다음 일반적으로 리소스의 소유권을 포기하고 포기하는 함수 또는 기타 작업입니다. „싱크”는 기존 개체의 소유권을 가져와 일반적으로 삭제하는 역방향 함수입니다.

Posted in Bez kategorii