[정수리] C++primer 4.3 동적 배열, 동적 메모리 할당 new delete

  • 소개
  • 권장 사항
  • 동적 그룹의 생성과 초기화
  • 일반 수조의 제한
  • 동적 수조와 일반 수조의 차이
  • 동적 그룹 정의
  • 동적 분배를 초기화하는 그룹
  • 1 표준 라이브러리 유형과 내장 유형 초기화 값의 차이
  • const 대상의 동적 수조
  • 동적 분배 빈 그룹 허용
  • 동적 공간의 방출
  • 2동적 수조의 사용

  • 간단한 소개
  • 모든 프로그램은 실행할 때 사용 가능한 메모리 공간을 차지하는데 동적 분배 대상을 저장하는 데 사용된다. 이 메모리 공간을 프로그램의 자유 저장소 또는 더미라고 부른다**
  • 동적 그룹을 정의할 때 메모리 공간을 분배해 줍니다. 정의만 하고 초기화하지 않으면 메모리 공간 안의 요소가 기본적으로 초기화되지 않을 수 있습니다. 예를 들어 내장된 유형의 동적 그룹이 없을 수도 있습니다.
  • c++ 언어는 new와 delete 표현식을 사용하여 동적 메모리 분배를 실현하고 C 언어에서는malloc와free 함수를 사용한다.
  • 초기화를 실현하려면 맨 뒤에 원괄호 int*pia2=new[10]()
  • const 대상의 동적 그룹을 초기화해야 합니다
  • 동적 그룹이 다 사용되면 사용 중인 메모리를 표시해야 합니다
  • delete 표현식으로 포인터가 가리키는 그룹 공간 delete [] pia
  • 권장 사항
    ======================================================================================================================
    1. 동적 그룹의 생성과 초기화
    1. 일반 배열의 제한
  • 수 그룹 길이 고정;
  • 컴파일할 때 길이를 알아야 한다.
  • 수조는 정의된 블록 문장에만 존재합니다.

  • 실제 과정에서 이러한 제한을 참을 수 없기 때문에, 그들은 운행할 때 동적 분배 그룹을 필요로 한다.
    2. 동적 그룹과 일반 그룹의 차이
  • 수조의 길이는 고정되어 있지만 동적 분배된 수조는 컴파일할 때 그 길이를 알 필요가 없고 실행할 때 수조의 길이를 확정할 수 있다.
  • 동적 그룹은 프로그램이 그것을 방출할 때까지 계속 존재할 것이다.

  • 3. 동적 배열 정의
  • 모든 프로그램은 실행할 때 사용할 수 있는 메모리 공간을 차지하고 동적 분배 대상을 저장하는데 이 메모리 공간을 프로그램의 자유 저장소free store 또는 heap이라고 부른다.
  • c++ 언어는 new와 delete 표현식을 사용하여 동적 메모리 분배를 실현하고 C 언어에서는malloc와free 함수를 사용한다.
  • 동적 분배 수조를 지정할 때 유형과 수조의 길이만 지정하면 수조의 대상에 이름을 붙일 필요가 없다. new 표현식은 새로운 분배 수조를 가리키는 첫 번째 요소를 가리키는 바늘 int*pia = new int[10]를 되돌려준다.new 표현식은 int형 원소 10개를 포함하는 그룹을 분배하고 첫 번째 원소를 가리키는 바늘을 되돌려줍니다. 이 반환값은 바늘pia를 초기화합니다.
  • new 표현식은 형식과 네모난 괄호에 제시된 수조 비트를 지정해야 한다. 이 비트는 임의의 표현식이 될 수 있다.
  • 자유 저장소에서 만든 그룹의 대상은 이름이 없습니다.

  • 4. 동적 분배 그룹 초기화
  • 동적 그룹을 정의한 후 초기화를 표시하지 않을 수 있음
  • 동적 분배 수조를 할 때 수조 원소가 클래스 유형을 가지고 있으면 이 클래스의 기본 구조 함수를 사용하여 초기화한다.
  • 만약에 수조 요소가 내장 유형이라면 초기화되지 않지만 모두 메모리 공간을 분배한다.4.1 표준 라이브러리 유형과 내장 유형 초기화 값의 차이점
  • //1.                    
    
    
    string *psa=new string[10];// 10   string
    int *pia=new int[10];//10         
    int *pia2=new[10]();//                      ,           0.
    
    //   new         10      ,        string  ,             ,   string                      。
    
    //               ,     10 int       ,        。
    
    //                      ,           0.
    //2.                   
    
    
    string sa[10];//    string       ,           
    int ia[10];   //ia             ,       0
    int main()
    {
    string  sa2[10];//    string       ,           
    int ia2[10];//ia             ,       ,    
    }
    //3.                  
    
    int global_int;   //              ,      0;
    string global_s;        //            ,        
    int main(){
    int local_int;    //              ,       ,      ;
    string local_s;       //              ,        ;
    return 0;
    }

    5.const 객체의 동적 배열
  • 만약에 우리가 자유 저장소에 만든 수조가 내장 형식의const 대상을 저장한다면 이 수조를 초기화해야 한다.
  • 수조 요소는 모두const 대상이기 때문에 값을 부여할 수 없기 때문에 초기화해야 합니다.
  • const int * pci_bad = new const int[100];//  ,     
    const int *pci_bad = new const int[100]();//  ,    
    const string *pcs =new const string[100];//     

    6. 빈 배열의 동적 할당 허용
    size_t n=get_size();
    int *p=new int [n];//      
    for(int *q=p;q!=p+n;++q)
    

    7. 동적 공간의 방출
  • 동적 분배된 메모리는 마지막에 반드시 방출해야 한다. 그렇지 않으면 메모리는 최종적으로 점차적으로 소모될 것이다.
  • 동적 그룹을 더 이상 사용할 필요가 없다면 프로그래머는 자신이 차지하는 저장 공간을 프로그램의 자유 저장 구역으로 되돌려 주어야 한다.
  • delete 표현식으로 포인터가 가리키는 그룹 공간 delete [] pia
  • 이 문장은pia가 가리키는 수조를 회수하여 해당하는 메모리를 자유 저장소에 되돌려준다.
  • []는 컴파일러에게 이 바늘이 가리키는 것은 자유 저장소의 수조이지 대상이 아니라는 것을 알려주기 때문에 없어서는 안 된다.

  • 2. 동적 그룹의 사용

    좋은 웹페이지 즐겨찾기