[C++] new / delete

muchan
muchan
∙∙조회 10

https://modoocode.com/169

위 링크에서 공부한 내용 정리입니다.


메모리 개념

프로그램이 실행되기 위해서는 데이터를 저장하고 관리할 메모리 공간이 필요하다.

스택(Stack): 지역 변수 등이 저장되는 공간으로, 메모리가 자동으로 할당되고 해제된다.

힙(Heap): 프로그램 실행 중 필요한 메모리를 동적으로 할당하는 공간으로, 개발자가 직접 관리할 수 있다.

C언어에서 동적할당

C언어에는 malloc과 free 함수를 지원하여 힙 상에서의 메모리 할당을 지원한다.

C++에서도 마찬가지로 malloc과 free를 지원하고 이를 언어차원에서 지원하는 것이 new와 delete다.

new는 malloc, delete는 free에 대응된다고 보면 된다.

new / delete

예제

c
/* new 와 delete 의 사용 */
#include <iostream>

int main() {
  int* p = new int;
  *p = 10;

  std::cout << *p << std::endl;

  delete p;
  return 0;
}

출력 결과

plain text
10

우선 int 크기의 공간을 new로 할당하여 그 주소값을 p에 집어 넣었고
마지막에 할당된 공간을 해제하기 위해 delete로 메모리 공간을 해제했다.

만약 new로 할당하지 않은 지역 변수를 delete로 해제해버린다면
Heap이 아닌 공간을 해제하려고 한다는 경고 메세지가 나온다고 한다.

new로 배열 할당하기

c
/* new 로 배열 할당하기 */

#include <iostream>

int main() {
  int arr_size;
  std::cout << "array size : ";
  std::cin >> arr_size;
  int *list = new int[arr_size];
  for (int i = 0; i < arr_size; i++) {
    std::cin >> list[i];
  }
  for (int i = 0; i < arr_size; i++) {
    std::cout << i << "th element of list : " << list[i] << std::endl;
  }
  delete[] list;
  return 0;
}

C에서 동적 할당할 때 배열 [] 안에 변수를 넣을 수 있었는데
new 도 마찬가지로 malloc을 사용하므로 []안에 변수를 넣어 배열을 선언할 수 있다
마지막에 배열을 delete하려면 delete[]로 메모리 해제해주면 된다