언어/C++
[C++] 동적 할당(dynamic allocation)
study_memo
2023. 9. 21. 20:37
<new 연산자>
C++에서는 new 연산자를 이용하여 메모리의 동적할당을 수행한다.
(cf. C언어에서는 malloc()이나 calloc() 함수 등을 이용하여 메모리의 동적 할당을 수행한다.)
타입* 포인터이름 = new 타입; |
(첫 번째 타입은 데이터에 맞는 포인터를 선언하기 위해, 두 번째 타입은 메모리의 종류를 지정하기 위해 사용됨.)
만약 사용할 수 있는 메모리가 부족하여 새로운 메모리를 만들지 못했다면,
new 연산자는 널 포인터를 반환한다.
<delete 연산자>
C언어가 free() 함수를 이용하여 동적으로 할당받은 메모리를 다시 운영체제로 반환한다면,
이와 마찬가지로 C++에서는 delete 연산자를 사용하여, 더는 사용하지 않는 메모리를 다시 메모리 공간에 돌려준다.
delete 포인터이름; |
(delete 연산자는 new 연산자를 통해 할당된 메모리를 해제할 때에만 사용한다.)
<예제>
int* ptr_int = new int;
*ptr_int = 100;
double* ptr_double = new double;
*ptr_double = 100.123;
cout << "int형 숫자의 값은 " << *ptr_int << "입니다." << endl;
cout << "int형 숫자의 메모리 주소는 " << ptr_int << "입니다." << endl;
cout << "double형 숫자의 값은 " << *ptr_double << "입니다." << endl;
cout << "double형 숫자의 메모리 주소는 " << ptr_double << "입니다." << endl;
delete ptr_int;
delete ptr_double;
실행 결과
int형 숫자의 값은 100입니다.
int형 숫자의 메모리 주소는 0x1d83010입니다.
double형 숫자의 값은 100.123입니다.
double형 숫자의 메모리 주소는 0x1d83030입니다.