UFO ET IT

unique_ptr에는 유형 매개 변수로 deleter가 있지만 shared_ptr에는없는 이유는 무엇입니까?

ufoet 2020. 12. 9. 20:58
반응형

unique_ptr에는 유형 매개 변수로 deleter가 있지만 shared_ptr에는없는 이유는 무엇입니까?


std::unique_ptrpointee의 유형 및 Deleter가의 종류 : 템플릿은 두 개의 매개 변수가 있습니다. 이 두 번째 매개 변수에는 기본값이 있으므로 일반적으로 std::unique_ptr<int>.

std::shared_ptrpointee의 종류 : 템플릿은 하나의 매개 변수 만 생각을 가지고있다. 그러나 삭제 자 유형이 클래스 템플릿에 없더라도이 항목과 함께 사용자 지정 삭제자를 사용할 수 있습니다. 일반적인 구현에서는 유형 삭제 기술을 사용하여이를 수행합니다.

같은 아이디어가 사용되지 않은 이유가 std::unique_ptr있습니까?


그 이유 중 일부는 shared_ptrref 카운트에 대해 명시적인 제어 블록 필요하고 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[]>모두 전문 덕분에) TT[].

참고 URL : https://stackoverflow.com/questions/6829576/why-does-unique-ptr-have-the-deleter-as-a-type-parameter-while-shared-ptr-doesn

반응형