new 와 delete 의 사용

wsung·2026년 1월 19일

프로그램이 정확하게 실행되기 위해서는 컴파일 시에 모든 변수의 주소값이 확정되어야만 함

=> 하지만 이를 위해서는 프로그램에 많은 제약이 따르기 때문에 프로그램 실행 시에 자유롭게 할당하고 해제할 수 있는 힙(heap) 이라는 공간이 따로 생겼음

이전에 컴파일러에 의해 어느정도 안정성이 보장되는 스택(Stack)과는 다르게 힙은 사용자가 스스로 제어해야 하는 부분인 만큼 책임이 따른다

c언어에서는 malloc과 free함수를 지원하여 힙 상에서의 메모리를 할당을 지원했음
C++에서도 마찬가지로 malloc과 free함수를 사용할 수 있다

-> 하지만 언어 차원에서 지원하는 것으로 바로 new와 delete라고 할 수 있다.
new는 말 그래도 malloc에 대응되는 것으로 메모리를 할당하고 delete는 free에 대응하여 메모리를 해제한다

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

int main(){
	int* p = new int;
    *p = 10;
    
    std::cout << *p << std::endl;
    
    delete p;
    return 0;

=> 10

int p = new int;
-> 위와 같이 int 크기의 공간을 할당하여 그 주소값을 p에 집어 넣었음을 알 수 있다. new 사용방법은
T
pointer = new T;

지역변수를 delete하면??

/* 지역 변수 delete 하기 */
#include <iostream>

int main() {
 int a = 5;

 delete &a;

 return 0;
}

heap이 아닌 공간을 해제한다고 하는 경고 메세지가 뜸

new로 배열 할당하기

/* 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;
}

list에 new를 이용하여 크기가 arr_size인 int 배열 생성
배열 생성할 때 []사용하여 배열의 크기를 넣어주면 됨

=> new가 주소를 반환하기 때문에 포인터형 배열 int *를 사용해야함

profile
0부터 시작하는 백엔드

0개의 댓글