# Language/C++

[C++] 동적 메모리 할당, 반환 ( new, delete 연산자)

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 연산자를 통해 메모리를 할당, 반환

 

프로그램이 종료될 때 할당받은 메모리는 힙에 자동으로 반환

 

 

 

 

 

 

728x90

'# 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