메모리 할당의 순서(new)

1) 메모리 할당

2) 할당된 메모리에 대해 한 개 이상의 생성자 호출

 

메모리 해제의 순서(delete)

1) 할당된 메모리에 대해 한 개 이상의 소멸자 호출

2) 메모리 해제

 

배열을 위해 만들어지는 힙 메모리에는 대개 배열원소의 개수가 박혀 들어갑니다.

이 때문에 delete 연산자는 소멸자가 몇 번 호출 될지를 쉽게 알수 있습니다.

 

int *i = new int[5];

delete i;

 

int형의 공간 다섯개만큼의 메모리를 할당했지만,delete는 단일 객체만을 해제한다고 표시했기 때문에,

메모리가 모두 해제되지 못합니다.

 

typedef로 정의된 어떤타입의 객체를 메모리에 생성하는것은 주의를 해야한다.

왜냐하면?

 

typedef std::string AddressLines[4];  // AddressLine으로 정의하고

std::string *pal = new AddressLines; // 이렇게 생성하게 되면 나중에 명확하지 않아 혼동될수 있습니다. 배열타입을 typedef 타입으로 만들지 않는 것이 좋습니다. ( vector<string> 사용 합시다 )

 

 

즉! 

new -> delete 씁시다. 

new [] -> delete[] 씁시다.

 

이것 만은 잊지 말자!

◆ new 표현식에 [] 썼으면, 대응되는 delete 표현식에도 []를 써야합니다. 마찬가지로 new 표현식에 []를 쓰지 않았으면, 대응되는 delete 표현식에도 []를 쓰지 말야야 합니다.


+ Recent posts