메모리 동적 할당을 위해 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 |