1 |
|
cs |
동적 메모리 할당 및 반환의 필요성
실행 중에 필요한 만큼 메모리를 할당받고 필요 없을 때 반환하는 메커니즘이 필요.
불필요한 메모리 공간을 줄이고 메모리 효율을 높인다.
C언어에서는 malloc(), free() 사용
C++에서는 new, delete 연산자 사용
new 연산자는 힙이라는 시스템 공간으로부터 메모리를 할당
delete 연산자는 할당받은 메모리를 힙으로 반환
힙 메모리가 부족하다면 new는 NULL 값을 리턴
new와 delete의 사용
데이터타입 *포인터변수 = new 데이터타입;
delete 포인터변수;
ex)
int *pInt = new int;
int *pInt = new int(20);
Circle *pCircle = new Circle();
delete 연산자 사용 시 주의점
동일한 메모리를 두 번 반환
동적으로 할당받지 않은 메모리를 반환
배열이라면 [ ] 붙이고, 아니라면 빼야함
배열의 동적 할당 및 반환
1
2
3
4
5
6
7
8 |
int *p = new int [5];
if(!p) return;
for(int i=0; i<5; i++){
p[i] = i; // *(p+i) = i;
}
delete [] p; |
cs |
객체의 동적 생성 및 반환
Circle *p = new Circle; // 매개변수 없는 생성자는 () 빼는 것이 맞다
Circle *q = new Circle(30)
delete p;
delete q; // delete가 실행되면 객체를 반환하기 직전에 소멸자가 실행
객체 배열의 동적 생성 및 반환
new를 이용하여 동적으로 배열을 생성할 때, 매개 변수 있는 생성자를 호출할 수 있는 방법은 없다.
Circle *pArray = new Circle[3];
pArray->setRadius(10);
pArray[1].setRadius(20);
delete [] pArray;
★ 정리 ★
힙(heap)은 응용프로그램들이 실행 중에 할당받아 사용하는 시스템 메모리, 적절한 시기에 동적 메모리를 할당, 반환하는 것이 필요
new 와 delete 연산자를 통해 메모리를 할당, 반환
프로그램이 종료될 때 할당받은 메모리는 힙에 자동으로 반환
'# Language > C++' 카테고리의 다른 글
[C++] string (0) | 2019.01.16 |
---|---|
[C++] this 포인터 (0) | 2019.01.15 |
[C++] 메모리 누수 (memory leak) (0) | 2019.01.15 |
[C++] 객체 배열 (0) | 2019.01.15 |
[C++] 객체 포인터 (0) | 2019.01.04 |
[C++] 문자열 (C-string, string) (0) | 2019.01.01 |
[C++] const의 개념 (0) | 2018.12.21 |