반응형
unique_ptr에는 유형 매개 변수로 deleter가 있지만 shared_ptr에는없는 이유는 무엇입니까?
std::unique_ptr
pointee의 유형 및 Deleter가의 종류 : 템플릿은 두 개의 매개 변수가 있습니다. 이 두 번째 매개 변수에는 기본값이 있으므로 일반적으로 std::unique_ptr<int>
.
std::shared_ptr
pointee의 종류 : 템플릿은 하나의 매개 변수 만 생각을 가지고있다. 그러나 삭제 자 유형이 클래스 템플릿에 없더라도이 항목과 함께 사용자 지정 삭제자를 사용할 수 있습니다. 일반적인 구현에서는 유형 삭제 기술을 사용하여이를 수행합니다.
같은 아이디어가 사용되지 않은 이유가 std::unique_ptr
있습니까?
그 이유 중 일부는 shared_ptr
ref 카운트에 대해 명시적인 제어 블록 이 필요하고 deleter를 붙이는 것이 그다지 큰 문제가 아니기 때문입니다. unique_ptr
그러나 추가 오버 헤드가 필요하지 않으며 추가하는 것은 인기가 없습니다. 오버 헤드가없는 클래스 여야합니다. unique_ptr
정적이어야합니다.
예를 들어 unique_ptr<T, std::function<void(T*)>>
내가 과거에했던 작업을 가질 수 있습니다 .
DeadMG가 지적한 것 외에도 또 다른 이유는 다음과 같이 작성할 수 있다는 것입니다.
std::unique_ptr<int[]> a(new int[100]);
하고 ~unique_ptr
부르는 것입니다 올바른 버전 delete
(을 통해 default_delete<_Tp[]>
모두 전문 덕분에) T
및 T[]
.
반응형
'UFO ET IT' 카테고리의 다른 글
R에서 ggplot2를 사용하여 날짜 이해 및 히스토그램 플로팅 (0) | 2020.12.09 |
---|---|
JUnit 이론과 매개 변수화 된 테스트의 차이점 (0) | 2020.12.09 |
Mercurial 저장소를 Git 하위 모듈로 사용하는 방법이 있습니까? (0) | 2020.12.09 |
루팅되지 않은 전화의 경우 USB 케이블없이 무선을 통한 Adb (0) | 2020.12.09 |
ASP.NET MVC로 대용량 파일 업로드 스트리밍 (0) | 2020.12.09 |