프로그래밍/Effective c++

28. 내부에서 사용하는 객체에 대한 ‘핸들’을 반환하는 코드는 되도록 피하자

CuriousBear 2016. 3. 10. 16:38
클래스 내부의 객체에 대한 핸들(참조자, 포인터, 반복자)를 반환하는 함수는 최대한 피하자.
이 함수를 직접적으로 사용하는 경우는  상관 없으나, 다음과 같이 새로 생성한 지역 객체에 대해서 이 함수를 쓰는 순간  무효참조 핸들(댕글링 포인터)이 된다.

Point& upperLeft() const { return pData ->ulhc ; } //내부 객체에 대한 핸들을 반환.

const Rectangle boundingBox(const GUIObject& obj) ; //복사생성자로 객체 생성하는 함수
const Point *pUpperLeft =  & (boundingBox(*pgo).upperLeft()) ; //지역 객체를 생성해 포인터에 그 핸들을 대입.

--> 우변의 객체는 이 문장이 끝나는 순간 사라지기 때문에 pUpperLeft는 무효참조 핸들이 된다.