unique_ptr 예제

이 섹션의 예제에서 값으로 unique_ptr을 반환합니다: 한 번에 한 명의 소유자만 있을 수 있습니다. 예를 들어 이 클래스 템플릿은 C++11로 더 이상 사용되지 않습니다. unique_ptr은 기능이 비슷하지만 보안이 향상된 새로운 시설입니다. auto_ptr새식을 통해 얻은 개체를 관리하고 auto_ptr 자체가 소멸될 때 해당 개체를 삭제하는 스마트 포인터입니다. auto_ptr 클래스를 사용 하 여 설명할 때 개체는 범위를 벗어날 때 가리키는 개체가 자동으로 소멸 되도록 할당 된 단일 개체에 대 한 포인터를 저장 합니다. 동일한 유형의 두 포인터가 동시에 동일한 리소스를 가리킬 수 없는 단독 소유권 모델을 기반으로 합니다. 아래 프로그램에 표시된 것처럼 포인터를 복사하거나 할당하면 소유권 즉 소스 포인터가 대상 포인터에 소유권을 부여해야 합니다. 비어 없는 unique_ptr 개체를 만들려면 개체를 만드는 동안 원시 포인터를 생성자에서 전달해야 합니다. 위의 예에서. 이렇게하면 함수가 고유 포인터 (역참조)와 개체에 대한 표준 참조로 작동합니까? 어느 것을 선호해야합니까? 이제 Task의 관련 포인터 소유권을 새 unique_ptr 개체즉, 처음 2문에서 res는 l 값이지만 ptr1은 생성자에서 이 l-값을 사용할 수 있습니다. 그러나 세 번째 문에서 ptr1은 l 값이지만 생성자에게 전달할 수 없습니다. 나는 우리가 std::unique_ptr 생성자에게 l-값을 전달할 수 없다고 생각하지만,이 상황은 나를 정말 혼란스럽게 만듭니다. BTW, 난 정말 당신의 튜토리얼을 감사하고 여기에 많은 것을 배웠습니다.

나는 지금이 사이트에 다시 와서 새로운 것을 배우고 내가 배운 것을 검토합니다. 고마워, 알렉스. std::shared_ptr과 달리 std::unique_ptr은 NullablePointer를 조정하는 사용자 지정 핸들 형식을 통해 개체를 관리할 수 있습니다. 예를 들어, typedef boost::offset_ptr 포인터를 정의하는 삭제장치를 제공하여 공유 메모리에 있는 개체를 관리할 수 있습니다. 또는 다른 멋진 포인터. 해제 한 후 포인터는 이제 비어 있으므로 unique_ptr에 의해 자동으로 해제되지 않습니다. 그런 다음 프로그래머는 포인터를 수동으로 삭제해야 합니다. std::unique_ptr은 포인터를 통해 다른 개체를 소유하고 관리하고 고유_ptr이 범위를 벗어날 때 해당 개체를 삭제하는 스마트 포인터입니다. 다음은 unique_ptr: std::unique_ptr의 사용을 보여주는 더 완전한 예는 std::auto_ptr의 대체품으로 C++11에서 개발되었습니다. unique_ptr은 유사한 기능을 갖춘 새로운 기능이지만 보안이 향상되고(가짜 복사 할당 없음), 추가 기능(삭제기) 및 배열에 대한 지원이 있습니다. 원시 포인터를 위한 컨테이너입니다. 일반 할당과 같이 포함된 포인터의 복사를 명시적으로 방지합니다.

따라서 unique_ptr을 사용하는 경우 한 리소스에서 최소 하나의 unique_ptr만 있을 수 있으며 해당 unique_ptr이 소멸되면 리소스가 자동으로 클레임됩니다.