> 백엔드 개발 > C++ > `std::unique_ptr`에는 T에 대한 완전한 정의가 필요합니까?

`std::unique_ptr`에는 T에 대한 완전한 정의가 필요합니까?

Barbara Streisand
풀어 주다: 2024-12-25 14:10:15
원래의
935명이 탐색했습니다.

Does `std::unique_ptr` Need a Complete Definition of T?

std::unique_ptr T의 전체 정의를 알아야 합니까?

Std::unique_ptr 관리하는 유형 T에 대한 완전한 정의가 필요합니까? 이 질문은 std::unique_ptr Thing이 전방 선언된 경우 Visual Studio 2010 SP1에서 컴파일하지 못합니다.

Visual Studio 2010 SP1의 구현 종속 동작

Visual Studio 2010 SP1의 동작은 다음과 같습니다. std::unique_ptr의 구현에는 Thing의 완전한 정의가 필요합니다. 이는 표준 요구사항이 아니라 구현별 선택입니다.

표준 라이브러리의 부분 예외

대부분의 C 표준 라이브러리 템플릿에는 완전한 유형이 필요하지만, std ::shared_ptr 및 std::unique_ptr은 부분적인 예외입니다. 일부 기능은 구현 포인터(pimpl) 패턴과 같은 관용어를 지원하는 역할로 인해 불완전한 유형으로 인스턴스화될 수 있습니다. 그러나 특정 작업에서 불완전한 유형을 사용하면 불완전한 객체 삭제와 같은 정의되지 않은 동작이 발생할 수 있습니다.

다른 작업에 대한 유형 완전성 요구 사항

std::unique_ptr 및 std::shared_ptr에는 다양한 상황에서 완전한 유형이 필요합니다. 예를 들어 ~std::unique_ptr에는 소멸자에 대한 완전한 유형이 필요한 반면, std::unique_ptr(A*)는 포인터가 인수되는 경우 불완전한 유형을 허용합니다. 표에 이러한 요구 사항이 요약되어 있습니다.

Operation std::unique_ptr std::shared_ptr
Default constructor incomplete incomplete
Copy constructor - incomplete
Move constructor incomplete incomplete
Destructor complete incomplete
Constructor from pointer incomplete complete
Copy assignment - incomplete
Move assignment complete incomplete
Reset without argument complete incomplete
Reset with argument complete complete

결론적으로 std::unique_ptr은 본질적으로 C 표준에서 완전한 형식 정의를 요구하지 않지만 일부 구현(예: Visual Studio 2010 SP1)에서는 이러한 요구 사항을 부과할 수 있습니다. . 정의되지 않은 동작을 방지하려면 사용되는 구현의 특정 요구 사항을 알고 있는 것이 중요합니다.

위 내용은 `std::unique_ptr`에는 T에 대한 완전한 정의가 필요합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿