[C++] 동적으로 메모리 할당하기

개발 노트 2008. 10. 7. 09:51 posted by 무병장수권력자


작성자 : 김문규
최조 작성일 : 2008.10.07

Efffective C++ 이란 책을 보면 C++에서는 malloc/free 대신에 new/delete를 사용하라는 말이 있습니다.
근데 막상 이렇게 선언하려 하면 어색하거나 뭔가 잘 되지 않는 경우가 있습니다. 그래서 정리해 보았습니다.

이유는 아래와 같습니다.
1. malloc과 free는 생성자와 소멸자의 존재자체를 모른다.  <-- 이게 가장 중요한 이유..
2. 1번의 문제로, 메모리릭 발생 위험이 따른다.(사용자가 간과했다간)
3. 1번의 문제로, 초기화 작업을 부수적으로 해야 한다.
4. 1번의 문제로 , 가독성을 떨어뜨릴수 있다(new와 malloc의 혼용 사용으로)

해결 방법은 아래와 같습니다.
1. 혼용 사용을 왠만해선 하지 마라
2. new와 delete를 사용 해라

근데, 2차원 배열만 되도 귀찮아 지는 건 사실이네요....

1차원 배열 선언
1) C 스타일
char *p = malloc(sizeof(char)*100);
free(p);

2) C++ 스타일
char* p = new char[100];
delete [] p;

2차원 배열 선언
1) C 스타일
char *p = malloc(sizeof(char)*100*50);
free(p);

2)C++ 스타일
char **p = new char*[50];
for(int i=0; i < 50; i++) p[i] = new char[100];

for(int i=0; i < 50; i++) delete [] p[i];
delete [] p;


참조
http://hoonspace.tistory.com/23
http://ikpil.com/284