Software/C/C++
[C++] new와 delete
charom
2007. 8. 5. 23:09
string *stringArray = new string[100];
.....
delete stringArray;
위의 코드에서 문제는 무엇인가?
delete를 수행하고 나면 앞에서 할당한 100개중 99개의 메모리는 해제 되지 않았다.
*new를 수행하면 어떤 일이 일어나는가?
1.메모리가 할당된다.(이는 함수 operator new에 의해서임)
2.한 개 이상의 생성자가 그 메모리를 위해 호출된다.
*delete를 호출하면 new와는 다른 두가지가 일어난다.
1.메모리를 위한 한 개 이상의 소멸자가 호출된다.
2.그런 다음 메모리가 해제된다.
string *stringPtr1 = new string;
string *stringPtr2 = new string[100];
....
delete stringPtr1;
delete [] stringPtr2;
위와 같이 해제를 해야된다. 그러나 delete [] stringPtr1; 이와같이 한다면 그 결과는 아무도 예측 할 수 없게 된다.
그러므로 다음과 같은 rule을 만들 수 있다.
new를 호출 할 때 []을 이용했다면 delete의 호출시에도 []을 이용하라.
new를 호출시 []을 이용하지 않았다면, delete시에도 []을 사용하지 마라.
이는 typedef에서도 동일 하다.
typedef string AddressLines[4];
string *pal = new AddressLines;
delete pal; //예측 불능
delete [] pal; //양호