항목13 - 자원 관리에는 객체가 그만!
2022.05.31
자원해제 delete는 왠만하면 소멸자서 실행하자.(스마트 포인터를 사용해 자동으로 소멸하게끔 해도 좋음)
but, 스마트포인터나 trd::shared_ptr은 delete를 사용하지, delete[]를 사용하지 않는다.
동적배열을 사용하였을 경우 delete로는 모든 메모리를 초기화 시킬 수 없다..(에러도 안난다고 하니 조심하자)
자원해제를 일일이 하다보면 분명 사람은 실수를 하게 되어있다.
그러니 포인터를 사용할때는 초기화, 자원해제를 세심하게 다루자.
잊지말자
- 자원 누출을 막기 위해, 생성자 안에서 자원을 획득(초기화)하고 소멸자에서 그것을 해제하는 RALL객체를 사용하자!
-일반적으로 널리 쓰이는 RALL 클래스는 tr1::shared_ptr 그리고 auto_ptr입니다. 이 둘 가운데 tr1::shared_ptr이 복사 시 동작이 더 직관적이니
대개 더 좋다. auto_ptr은 복사 시 원본 객체를 null로 만들고 복사된 객체에만 데이터가 존재한다.
* RALL(Resource Acquisition Is Initialization) 원칙
- 안전하게 자원을 사용하기 위한, C++에서 자주 쓰는 패턴
의문점
스마트 포인터는 delete가 소멸자가 실행 될 때 실행되는건가?
댓글을 작성해보세요.