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; //양호