무슨말?(제목이 조금 길다)
객체 생성 직 후 스마트 포인터에 저장한 다음, 그 스마트 포인터로 사용하라는 뜻
왜!?
메모리 누수가 발생될 수 있기 때문이다.
언제?
함수의 매개변수로써 스마트 포인터를 받을 때, 함수의 매개변수가 초기화가 이루어지는 타이밍이 각각의 컴파일마다 다르기 때문에,
매개변수 초기화가 만약..
1. 동적 메모리를 할당 예, new CBabo 처럼
2. 함수의 리턴값을 매개변수로 할당 예, sence()
3. 스마트포인터에 동적 메모리를 담는다. 예) Smart_PTR<CBABO> pw에 1번의 리턴 담음
바로 이때 2번에서 예외가 발생하면, .. 1번은 영영 잃어 버리게 된다. 이렇게 매개변수 초기화 타이밍이 각 컴파일마다 다르고 바뀔 수 도 있다.
그래서
매개변수의 초기화가 언제 발생 되는지 알수 없어, RAII 객체에 우선 담아야 한다.
자 결론!
이것만은 잊지 말자!
1. new로 생성한 객체를 스마트 포인터로 넣는 코드는 별도의 한 문장으로 만들자.
관련 링크
http://redinlife.egloos.com/1615637
객체 생성 직 후 스마트 포인터에 저장한 다음, 그 스마트 포인터로 사용하라는 뜻
왜!?
메모리 누수가 발생될 수 있기 때문이다.
언제?
함수의 매개변수로써 스마트 포인터를 받을 때, 함수의 매개변수가 초기화가 이루어지는 타이밍이 각각의 컴파일마다 다르기 때문에,
매개변수 초기화가 만약..
1. 동적 메모리를 할당 예, new CBabo 처럼
2. 함수의 리턴값을 매개변수로 할당 예, sence()
3. 스마트포인터에 동적 메모리를 담는다. 예) Smart_PTR<CBABO> pw에 1번의 리턴 담음
바로 이때 2번에서 예외가 발생하면, .. 1번은 영영 잃어 버리게 된다. 이렇게 매개변수 초기화 타이밍이 각 컴파일마다 다르고 바뀔 수 도 있다.
그래서
매개변수의 초기화가 언제 발생 되는지 알수 없어, RAII 객체에 우선 담아야 한다.
자 결론!
이것만은 잊지 말자!
1. new로 생성한 객체를 스마트 포인터로 넣는 코드는 별도의 한 문장으로 만들자.
관련 링크
http://redinlife.egloos.com/1615637
'책 정리 > Effective C++ 3판' 카테고리의 다른 글
항목 22: 데이터 멤버가 선언될 곳은 private 영역임을 명심하자 (0) | 2008.06.07 |
---|---|
항목 21: 함수에서 객체를 반환해야 할 경우에 참조자를 반환하려고 들지 말자. (0) | 2008.06.07 |
항목 20: '값에 의한 전달'보다는 '상수객체 참조자에 의한 전달'방식을 택하는 편이 대개 낫다. (0) | 2008.06.06 |
항목 19: 클래스 설계는 타입 설계와 똑같이 취급하자. (0) | 2008.06.05 |
항목 18: 인터페이스 설계는 제대로 쓰기엔 쉽게, 엉터리로 쓰기엔 어렵게 하자. (0) | 2008.06.04 |
항목 16: new 및 delete를 사용할 때는 형태를 반드시 맞추자 (0) | 2008.06.03 |
항목 15: 자원 관리 클래스에서 관리되는 자원은 외부에서 접근할 수 있도록 하자. (0) | 2008.06.02 |
항목 14: 자원 관리 클래스의 복사 동작에 대해 진지하게 고찰하자 (0) | 2008.06.01 |
항목 13: 자원 관리에는 객체가 그만! (0) | 2008.06.01 |
항목 12: 객체의 모든 부분을 빠짐없이 복사하자 (0) | 2008.06.01 |
최근댓글