본문 바로가기

프로그래밍/C,C++

delete obj, delete [] obj 차이

 

메모리 동적 할당을 위해 c++ 에서는 new,

해제를 위해 delete를 사용한다.

 

delete 구문 중에 delete [] 는 무슨 이유일까?

 

* int 형 메모리를 할당과 해제하기 위해서는

 

pData = new int;

delete pData;

 

 

* int 형 100개의 메모리를 할당과 해제하기 위해서는

 

pData = new int[100];

delete [] pData;

 

이거시 기본 문법(?) 이다. 이거야 다 아는 것이지만...

 

헌데 왜 저렇게 쓸까? 단순히 배열이기에 배열처럼 해제하려고?

배열을 그냥 delete pData; 하면 해제가 안될까?

 

적어도 VC++ 에서는 잘된다.

문제가 생기지도, 릭도 안생긴다~

 

그럼 도대체 왜!!! 저렇게 쓸까?

 

그 이유는 new, delete가 클래스나 구조체등의 오브젝트도 메모리를 할당하고

해제할수 있는것에 있다.

 

위의 경우와 같이 기본 데이터형의 경우 new는 malloc과 같이 int 100개의 메모리를

할당하는 작업만을 수행한다.

따라서, delete / delete[] 아무것이나 정상 작동한다.

 

반면, 클래스 오브젝트 pData = new CObject[100]; 인 경우는 다르다.

CObject 100개의 메모리외에 오브젝트 갯수를 나타내는 int 값 즉, 100이라는 숫자를

저장하기 위한 int 크기만큼의 공간이 추가로 할당되어 들어가게 된다.

그리고, 각각의 생성자를 호출 하는 작업을 한다.

 

그렇다 생성과 해제 시 먼가를 호출한다. 그것이 뽀인뜨다~

 

해재 시

delete [] 는 오브젝트 갯수를 나타내는 값을 읽어 그 수만큼 루프를 돌며

오브젝트의 각 파괴자를 호출하게 된다.

 

따라서, delete 만을 쓸 경우 첫번째 오브젝트의 파괴자만을 호출하고

리턴하게 되는 엄청난 사태가 벌어지게 되는 거시다~

 

만약, 각 오브젝트 내부에 별도의 동적 메모리를 사용하고, 파괴자에서 메모리를 해제 한다면

delete 만으론 각 오브젝트의 파괴자가 호출되지 않기에

메모리 릭이 쥘쥘 나올것이다.

 

따라서, 기본 데이터 형이건 오브젝트건

만일의 오류를 생각해 기본을 따르는것!!!

 

new - delete / new [] , delete [] 는 짝을 이루어 쓰는 거시 좋다~~

'프로그래밍 > C,C++' 카테고리의 다른 글

[C#] 파일 읽고,쓰기 기초  (0) 2013.09.12
[C#] 이미지 처리 기본 사항들  (0) 2013.09.12
[C#] 이벤트  (0) 2013.09.12
[C#] 폼 띄우기  (0) 2013.09.12
GCC 옵션  (0) 2011.07.21
POSIX 쓰레드 함수들  (0) 2010.04.16
[Linux] 세마포어 설정  (0) 2010.04.15
[Linux] 라이브러리  (0) 2010.01.28
바이트오더~ 비트 스트림~  (0) 2009.06.04
[C]  (0) 2009.06.04