[Modern C++] 3. new와 delete

윤정민·2023년 6월 30일
0

C++

목록 보기
8/46

1. new와 delete의 필요성

c에서는 malloc과 free를 c++에서는 new와 delete를 사용해 메모리를 관리한다. 프로그램이 정확하게 실행되기 위해서는 컴파일 시에 모든 변수의 주소값이 확정되어야만 한다. 하지만, 이를 위해서는 프로그램에 많은 제약이 따르기 때문에 프로그램 실행 시에 자유롭게 할당하고 해제가능한 힙(heap) 이라는 공간이 따로 있다. 하지만 이전에 컴파일러에 의해 어느정도 안정성이 보장되는 스택(stack) 과는 다르게 힙은 사용자가 스스로 제어해야 하는 부부인 만큼 책임이 따른다.

2. new와 delete의사용법

2.1. 일반적인 사용법

#include <iostream>

int main()
{
  int* p = new int;	//int 크기의 공간을 할당하여 그 주소값을 p에 집어넣음
  *p = 10;	//값을 넣음
  
  std::cout<< *p << std::endl;
  
  delete p;	// p에 할당된 int크기의 공간이 해제됨
  			// delete로 해제 가능한 메모리 공간은 사용자가 new를 통해 할당한 공간만 가능
  return 0;
}
  • 출력 결과
    10

2.2. delete의 잘못된 사용법(지역변수 해제)

#include <iostream>

int main()
{
  int a = 5;
  delete & a;	//실행시 heap이 아닌 공간을 해제하려고 한다는 경고 메세지를 보게 됨
  
  return 0;
}

2.3. new를 사용한 배열 할당

#include <iostream>

int main()
{
  int arr_size;
  std::cout << "array size: ";
  std::cin >> arr_size;
  
  int *list = new int[arr_size];	//크기가 arr_size인 int 배열을 생성하여 그 첫 번째 주소 값을 list에 할당
  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;	//new [] 를 통해 할당했으면 delete[]를 통해 해제
  return 0;
}
  • 출력 결과
    array size : 5
    1 4 2 6 8
    1th element of list : 1
    2th element of list : 4
    3th element of list : 2
    4th element of list : 6
    5th element of list : 8
profile
그냥 하자

0개의 댓글