new와 delete 키워드

조성재·2022년 4월 3일
0

처음부터 C++

목록 보기
4/6

Memory

  • 메모리 관리는 언제나 중요한 문제다.
  • 프로그램이 정확하게 실행되기 위해서는 컴파일시에 모든 변수의 주소값이 확정되어야만 한다.
  • 하지만 이를 위해서는 프로그램에 많은 제약이 따르기 때문에 프로그램 실행 시에 자유롭게 할당하고 해제할 수 있는 힙(heap)이라는 공간이 따로 생겨났다.
  • 하지만 이전에 컴파일러에 의해 어느정도 안정성이 보장되는 스텍(stack)과는 다르게 힙은 사용자가 스스로 제어해야 하는 부분인 만큼 책임이 따른다.
💡 힙 공간의 메모리 관리를 잘못하게 되면 프로그램 뻗는다 항상 주의할 것!!! 1. 더 이상 사용되지 않는 것은 반드시 메모리에서 해제 2. 배열과 같이 할당된 주소값을 넘어서 사용하지 않도록 주의!!!
  • C언어에서는 mallocfree 함수를 지원하여 힙 상에서의 메모리 할당을 지원했다. C++에서도 마찬가지로 mallocfree함수를 사용할 수 있다.
  • 하지만 C++언어 차원에서 지원하는 것은 newdelete 라고 할 수 있다.
  • new는 말 그대로 malloc과 대응되는 것으로 메모리를 할당하고, deletefree에 대응되는 것으로 메모리를 해제한다.
  • 여기서 주의해야할 점은 delete키워드의 사용은 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;
}
  • 배열의 크기를 지정할 arr_size 변수를 선언하고 cin을 통해 값을 입력 받아 arr_size에 저장
  • new 키워드를 사용해 list라는 이름의 int형 배열을 선언 이 때 크기는 arr_size의 값과 같고 배열 내부는 비어있는(엄밀히는 쓰레기값이 채워져 있는 상태)상태
  • 마지막의 delete[]new로 생성한 객체의 형태가 new[]였기 때문에 이와 똑같이 delete[]로 메모리에서 해제한다. 즉 newdelete는 짝을 이룬다.

0개의 댓글