반응형
0. 요약
- new와 delete 형태를 맞추자
- new 에 []를 썼으면 delete에 []를 쓰자
- new 에 []를 안썼으면 delete에 []를 쓰지 말자
1. new, delete의 동작 순서
new
- 메모리가 할당됨
- 할당된 메모리에 한 개 이상의 생성자가 호출됨
delete
- 할당된 메모리에 한 개 이상의 소멸자가 호출됨
- 메모리가 해제됨
2. 객체 1개 vs 배열로 할당/해제
- 한 개 객체 할당 시 메모리 구조
- object
- 객체 배열 할당 시 메모리 구조
- 객체 수(n) - object - obejct - ...
- 위의 구조로 delete 연산자가 몇 번 호출 될지 쉽게 알 수 있음
- 주의 사항
- delete 뒤에 [] 를 붙여줘야만 포인터가 배열을 가리키고 있다고 이해함
- 만약 [] 가 없으면 단일 객체로 간주하고 1개의 객체만 delete 처리함
3. 결론
- new 와 delete 형태를 맞추자
- new 에 []를 썼으면 delete에 []를 쓰자
- new 에 []를 안썼으면 delete에 []를 쓰지 말자
- 배열 타입을 typedef으로 만들지 않도록 하자
- string 또는 vector type을 활용하자!
참고
- Effective C++
반응형
'C++ > Effective C++' 카테고리의 다른 글
[Effective C++] 18. 인터페이스 설계는 제대로 쓰기엔 쉽게, 엉터리로 쓰기엔 어렵게 하자 (0) | 2021.03.15 |
---|---|
[Effective C++] 17. new로 생성한 객체를 스마트 포인터에 저장하는 코드는 별도의 한 문장으로 만들자 (0) | 2021.03.15 |
[Effective C++] 15. 자원 관리 클래스에서 관리되는 자원은 외부에서 접근할 수 있도록 하자 (0) | 2021.03.15 |
[Effective C++] 14. 자원 관리 클래스의 복사 동작에 대해 진지하게 고찰하자. (0) | 2021.03.15 |
[Effective C++] 13. 자원 관리에는 객체가 그만 (0) | 2021.03.15 |