<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입니다.
'언어 > C++' 카테고리의 다른 글
[C++] 얕은 복사, 깊은 복사 (0) | 2023.09.25 |
---|---|
[C++] 1. 멤버이니셜라이저(feat. const 변수), 2. 생성자와 소멸자를 이용한 동적할당, 3. this 포인터 (0) | 2023.09.25 |
[C++] 참조자가 객체로 쓰였을 때는? (0) | 2023.09.25 |
[C++] *this가 반환 값일 때, 함수의 반환형에 &를 쓰는 이유 (+ this와 *this의 차이) (0) | 2023.09.24 |
[C++] 함수 오버로딩이란? (cf. 함수 오버라이딩) (0) | 2023.09.21 |