C++primer 제12장 노트 초고

3436 단어

12.1 개요

  • 국부static 대상, 클래스의static 데이터 구성원과 함수 이외에 정의된 변수는 모두 정적 메모리에 저장된다.함수 내의 비static 대상이 창고에 저장됨;동적 분배 대상은 더미에 저장된다(운행할 때 메모리를 분배한다).
  • shared_ptr
  • use_count () 는 호출 포인터와 가리키는 대상의 포인터 수를 공유합니다.
  • unique () 만약usecount () 는 1이true로 되돌아오고, 그렇지 않으면false로 되돌아옵니다.
  • 부치가 p=q작업을 하면 p의 인용 횟수가 감소하고 q의 인용 횟수가 증가하며 p의 인용 횟수가 0일 때 관리된 원래 메모리를 방출한다.
  • make_표준 라이브러리 함수, 안전한 메모리 분배 방법, 이 대상을 가리키는 sharedptr
  • 내장 포인터로 shared 초기화ptr에 존재할 수 있는 문제
    int *x = new int (42);
    shared_ptr<int> p1(x);
    process(p1);             // , 
    process(shared_ptr<int>x)// ,x ( )
  • get()은 스마트 포인터 관리 대상을 가리키는 내장 포인터를 되돌려줍니다.
  • 초기화된 두 번째 매개 변수는 함수를 삭제기로 수신할 수 있다(술어가 아닌 경우).

  • 참고:
  • shared_ptr 리셋 작업 중 쓸모없는sharedptr, 제때에 삭제해야 합니다.
  • 내장 포인터와 스마트 포인터는 스텔스 변환이 존재하지 않기 때문에 직접 초기화해야 한다.
  • get() 방법을 사용할 때 대상 공간을 방출하는 누락이 발생하기 쉽다.

  • unique_ptr
  • 초기화 시 직접 복사가 필요하며 이 종류의 포인터는 복사를 지원하지 않습니다
    unique_ptr<int> p(new int (42));
  • release()가 가지고 있는 바늘을 되돌려주고uniqueptr를 비웁니다.
  • reset()이 가리키는 대상을 방출합니다.
  • reset (내장 바늘) 은 바늘을 바꾸어 대상을 가리킨다.
  • 와shared 정의 가능ptr와 유사한 테이프 삭제기 버전이지만, 삭제기 종류를 동시에 제공해야 합니다.

  • 주:release()를 사용할 때는 결과를 저장해야 합니다. 그렇지 않으면 메모리 유출이 발생하기 쉽습니다.
  • weak_ptr
  • use_count()는 이 바늘이 같은 대상을 가리키는shared 를 되돌려줍니다ptr의 수량
  • expired ()만약usecount () 는 0이true로 되돌아오고, 그렇지 않으면false
  • 로 되돌아옵니다
  • lock()expired()는true로 빈 shared 반환ptr, 그렇지 않으면 이 대상을 가리키는sharedptr

  • 주:weakptr는shared 를 검사하는 데 자주 사용됩니다ptr는 대상이 존재하는지 가리키며shared 가져오기ptr 시 lock () 방법을 사용해야 합니다.
  • auto가 동적 분배 초기화에 참여할 때 초기 값을 제공하는 괄호 안에 하나의 초기화기만 있어야 한다.
  • 동적 분배 메모리 상한선은 크지만 분배 상한선도 있다.분배 상한에 도달 시, 던진badalloc 예외.포지셔닝 new를 사용하면 이 이상을 피할 수 있습니다:
        int *p = new (nothrow) int;
  • 12.2 동적 배열

  • new 조작을 통해 얻은 대상은 그룹 형식이 아니라 그룹 요소 형식의 바늘입니다.따라서 이 포인터에 전역begin () 과end () 를 호출할 수 없고, 범위 for를 사용할 수 없습니다.
  • new 조작을 사용하여 길이가 0인 동적 그룹을 분배할 때, 이를 끝부분 교체기로 사용할 수 있습니다.
  • new 연산을 사용하여 동적 그룹을 생성하고sharedptr를 초기화할 때 삭제기를 제공해야 합니다. (기본적으로 하나의 대상을 삭제하기 때문입니다.)
  • allocator 클래스
  • 초기화
    allocator<int> a;
  • allocate(n)의 분배 길이가 n이고 구조되지 않은 메모리
  • deallocate(p,n)는 p부터 길이가 n인 메모리를 방출하고 다음과 같은 요구가 있습니다.
  • n은 생성 시 필요한 크기여야 합니다
  • .
  • 석방하기 전에destroy
  • 를 실행해야 합니다
  • construct(p,args) 구조 대상
  • destroy(p) 실행 분석 함수
  • allocator가 표준 라이브러리의 다른 용기와 함께 작업을 하기 위해 표준 라이브러리는 두 가지 수반 알고리즘을 제공했다.
  • uninitialized_copy()
  • uninitialized_copy_n()
  • unintialized_fill()
  • uninitialized_fill_n()


  • 좋은 웹페이지 즐겨찾기