메모리 할당의 순서(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 표현식에도 []를 쓰지 말야야 합니다.
'0x0001 > Effective C++' 카테고리의 다른 글
[Effective C++] 항목 18 : 인터페이스 설계는 제대로 쓰기엔 쉽게, 엉터리로 쓰기엔 어렵게 하자 (0) | 2019.02.13 |
---|---|
[Effective C++] 항목 17 : new로 생성한 객체를 스마트 포인터에 저장하는 코드는 별도의 한 문장으로 만들자 (0) | 2019.02.13 |
[Effective C++] 항목 15 : 자원 관리 클래스에서 관리되는 자원은 외부에서 접근할 수 있도록 하자 (0) | 2019.02.12 |
[Effective C++] 항목 14 : 자원 관리 클래스의 복사 동작에 대해 진지하게 고찰하자 (0) | 2019.02.12 |
[Effective C++] 항목 13 : 자원 관리에는 객체가 그만! (0) | 2019.02.12 |