Linear Algebra

new 그리고 delete

왜 동적할당 해야하는가?

1.
일반적으로 프로그램을 실행하게 되면 RAM에 메모리를 차지하게 된다. 그런데 만약, 잠깐 프로그램 사용하고 그 이후에는 사용하지 않을꺼라면? RAM에서 사라지게 하는 것이 좋다! 따라서, 사용할 때만 메모리를 할당하고 필요가 없어지면 메모리를 해지하게 해야 할 필요성이 생긴다.
2.
일반적인 변수나 함수의 경우 stack에 저장되는데, 이 경우 범위를 벗어나면 사용할 수 없다는 단점이 있다. 동적할당의 경우 heap에 저장하기 떄문에 이러한 제한 조건으로부터 자유로울 수 있다. 함수 리턴 이후에도 메모리 할당을 남겨도어 변수를 사용할 수 있게끔 해준다.
#include <iostream> int main () { int * p = new int; *p = 1303; std::cout << *p << std::endl; delete p; //singel 변수에 대한 delete return 0; }
C++
복사
int 크기의 공간을 heap에 할당하고 이 것의 주소값을 포인터 p에 넣는다.
일반적인 경우, 배열을 선언하기 위해서는 배열의 크기를 컴파일 전에 정해야 하지만, 동적할당을 이용한다면 그럴 필요가 없다. 런타임에서 배열의 크기를 정해줄 수 있다.
#include <iostream> int main () { int dynamic_array_size = 0; std::cout << "Length of dynamic array : " << std::endl; std::cin >> dynamic_array_size; double * array = new double[dynamic_array_size]; for (int i = 0; i < dynamic_array_size; i++) array[i] = i+2; for (int i = 0; i < dynamic_array_size; i++) std::cout << array[i] << std::endl; delete[] array; //array 타입 변수에 대한 delete return 0; }
C++
복사
위의 과정이 동일하게 array 타입에도 적용된다.

Reference