어떤 C 스마트 포인터 구현이 존재하며 어떻게 비교됩니까?
C에서 스마트 포인터는 다음을 수행하는 래퍼 클래스입니다. 동적으로 할당된 객체의 수명을 관리하여 더 이상 필요하지 않을 때 자동 메모리 할당 해제를 제공합니다. 스마트 포인터의 다양한 구현이 가능하며 각 구현에는 고유한 장점과 단점이 있습니다.
C 03 구현>
-
std::auto_ptr: 지정된 객체를 소유하지만 STL에서 복사하거나 사용할 수 없는 제한된 가비지 수집 기능 컨테이너. C 표준에서는 더 이상 사용되지 않습니다.
-
std::auto_ptr_ref: 특정 상황에서 복사 및 할당을 허용하기 위해 std::auto_ptr과 함께 사용되는 디자인 세부 사항입니다.
C 11 구현
-
std::unique_ptr: std::auto_ptr을 배열 처리, lvalue 보호 및 STL 호환성에 대한 주요 개선 사항으로 대체합니다. 포인터의 독점 소유권을 부여합니다.
-
std::shared_ptr: 동적으로 할당된 객체 주위에 참조 횟수가 계산된 스마트 포인터를 래핑하여 공유 소유권을 허용합니다. 스레드 안전성을 지원하고 불완전한 유형을 처리합니다.
-
std::weak_ptr: std::shared_ptr이 있는 객체에 대한 비소유 참조입니다. 객체 삭제를 방지하지는 않지만 여전히 유효한 경우 std::shared_ptr을 검색할 수 있습니다. 순환 참조 카운트를 방지하는 데 사용됩니다.
Boost 구현
-
boost::shared_ptr: 참조- 스마트 포인터로 인해 널리 사용됩니다. 다재다능함.
-
boost::weak_ptr: C 11과 유사한 Boost::shared_ptr에 대한 비소유 참조입니다.
-
boost:: scoped_ptr: 다음과 비교할 수 있는 복사 의미가 없는 경량 스마트 포인터입니다. std::unique_ptr.
-
boost::intrusive_ptr: 사용자 정의된 참조 카운팅 및 스레드 안전성을 갖춘 사용자 정의 스마트 포인터 호환 클래스를 생성하도록 설계되었습니다.
-
boost:: shared_array: 배열을 위한 Boost::shared_ptr, 연산자[] 및 같은 배열 조작 기능 제공 delete[].
-
boost::scoped_array: 배열용 Boost::scoped_ptr은 내장된 배열 기능을 포함하지만 복사할 수 없습니다.
Qt 구현
-
QPointer: QObject 및 파생 클래스에 대한 "약한" 스마트 포인터로, 액세스하기 전에 개체 유효성을 확인하지만 다중 스레드 환경에서는 제한이 있습니다.
-
QSharedDataPointer: 참조 카운팅 구현이 필요하지만 그렇지 않은 "강력한" 스마트 포인터입니다. omic.
-
QExplicitlySharedDataPointer: QSharedDataPointer와 유사하지만, 가리키는 개체를 분리할 시기를 제어할 수 있습니다.
-
QSharedPointer: 원자 참조 -스레드 안전성, 사용자 정의 삭제 및 호환성을 갖춘 계산된 스마트 포인터 Boost::shared_ptr.
-
QWeakPointer: QSharedPointer에 대한 비소유 참조, std::weak_ptr.
-
QScopedPointer: 기반 Boost::scoped_ptr에서 예외 안전을 위한 단일 소유자 스마트 포인터를 제공하고 호환성.
위 내용은 어떤 C 스마트 포인터 구현이 존재하며, 어떻게 다릅니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!