[STL] construct() 및 destroy()

1944 단어
STL은 초기화되지 않은 공간에 작용하는 다섯 개의 글로벌 함수를 정의합니다.
이 중 두 개의 전역 함수인 construct()와destroy()는 대상의 구조와 분석을 책임지고 STL 표준 규범에 속한다.
구성 객체는 위치 지정 new를 직접 사용합니다.
template <class T1, class T2>
inline void construct(T1* p, const T2& value) {
  new (p) T1(value);    //  new
}

분석 객체는 여러 버전으로 나뉘어져 있습니다.
버전 1:
template <class T>
inline void destroy(T* pointer) {
    pointer->~T();   //  
}

버전 2:
template <class ForwardIterator>
inline void destroy(ForwardIterator first, ForwardIterator last) {
  __destroy(first, last, value_type(first));
}

호출:
template <class ForwardIterator, class T>
inline void __destroy(ForwardIterator first, ForwardIterator last, T*) {
  typedef typename __type_traits<T>::has_trivial_destructor trivial_destructor;     //  
  __destroy_aux(first, last, trivial_destructor());
}

그 다음에 대상의 필요에 따라 각각 호출한다.
template <class ForwardIterator>
inline void
__destroy_aux(ForwardIterator first, ForwardIterator last, __false_type) {     // non-trivial destructor
  for ( ; first < last; ++first)
    destroy(&*first);   //  
}
 
template <class ForwardIterator> 
inline void __destroy_aux(ForwardIterator, ForwardIterator, __true_type) {}    // trivial destructor

두 가지 버전 2의 리셋 버전도 있습니다.
//  , 
inline void destroy(char*, char*) {}
inline void destroy(wchar_t*, wchar_t*) {}

대상이 문자라면 아무것도 하지 않는 것이 분명하다.
다음 세 가지 글로벌 함수:
  • uninitialized_copy
  • uninitialized_fill
  • uninitialized_fill_n

  • 이 세 함수는 모두 서로 다른 재부팅 버전을 가지고 원소가 POD(전통 C struct 유형)인지 여부에 따라 해당하는 동작을 수행하거나 직접memmove(), STL 범용 함수를 호출하거나 각 원소에 구조 함수를 각각 호출한다.P77의 그림은 이미 매우 잘 요약되었다.자세한 내용은 유형 추출기 type traits 를 참조하십시오.
    참조:
    P51, P70.

    좋은 웹페이지 즐겨찾기