언어/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입니다.