작성자 : 김문규
최조 작성일 : 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 스타일
2) C++ 스타일
2차원 배열 선언
1) C 스타일
2)C++ 스타일
참조
http://hoonspace.tistory.com/23
http://ikpil.com/284
최조 작성일 : 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);
free(p);
2) C++ 스타일
char* p = new char[100];
delete [] p;
delete [] p;
2차원 배열 선언
1) C 스타일
char *p = malloc(sizeof(char)*100*50);
free(p);
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;
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
'개발 노트' 카테고리의 다른 글
VMWare를 이용한 리눅스 개발 환경 구축 (0) | 2008.10.08 |
---|---|
[C/C++] 문자열 관련 함수 (0) | 2008.10.08 |
이클립스 에러 - JVM terminated. Exit code = -1 .... (0) | 2008.10.02 |
[C/C++(Windows)] 윈도우에서 네트워크 인터페이스 정보 알아내기 (0) | 2008.09.30 |
[C/C++] 현재 시간 얻기 (1) | 2008.09.29 |