- new / delete 연산자를 사용해서 표현식을 쓰게 되면 아래 표의 순서로 동작합니다.
new
|
① 메모리 할당
② 할당된 메모리에 대해 한 개 이상의 생성자 호출
|
delete
|
① 기존에 할당된 메모리에 대해 한개 이상의 소멸자 호출
② 메모리 해제
|
- delete 연산자가 적용되는 객체는 대체 몇 개나 될까요? ==> 소멸자가 호출되는 횟수
- 단일 객체의 메모리 배치구조는 객체 배열에 대한 메모리 배치구조와 다릅니다.
배열을 위해 만들어지는 힙 메모리에는 대개 배열원소의 개수가 박혀 있어, 소멸자가 몇번 호출될지를 쉽게 알 수 있습니다.
반면, 단일 객체용 힙 메모리는 이런 정보가 없습니다.
1
2
3
4
5
| std::string *stringPtr1 = new std::string; std::string *stringPtr2 = new std::string[100]; delete stringPtr1; delete [] stringPtr2; |
- delete 연산자로 하여금 '배열 크기 정보가 있다'는 것을 알려주기 위해서는 대괄호 쌍( [] )을 delete 뒤에 붙여줍니다.
* new 표현식에 []를 썼으면, 대응되는 delete 표현식에도 []를 써야 합니다.
마찬가지로 new 표현식에 []를 안썼으면, 대응되는 delete 표현식에도 []를 쓰지 말아야 합니다.
댓글 없음:
댓글 쓰기