최상위 클래스를 만들고 난 후 에 이를 파생한 클랙스 객체를 사용하는 경우에는 팩토리 함수를 사용해야 한다.
ex)
class Investment{...}; //클래스 형태의 최상위 클래스
Investment* createInvestment(); //Investment class를 클래스 객체로 동적 할당 후 그 포인터 반환
delete createInvestment; //객체를 해제
객체 해제시 중간에 return 문이 들어가있는 경우 문제가 발생할 수 있음.
따라서 이는 자원이 누수될 수 있는 문제를 방생 시킬수 있음.
해결방법
1. auto_ptr: 포인터와 비슷하게 동작하는 객체(스마트 포인터), 가리키고 있는 대상에 대해 소멸자가 자동으로 delete를 불러주도록 설계
사용 방법
void f() { std::auto_ptr
pInv(createInvestment()); //팩토리 함수 호출, 이전과 동일 } //auto_ptr 소멸자로 자동 pInv 삭제
자원 관리에 객체를 사용하는 방법
1. 자원을 획득한 후에 자원 관리 객체에게 넘김
2. 자원 관리 객체는 자신의 소멸자를 사용해서 자원이 확실히 해제되도록 함.
*어떤 객체를 가리키는 auto_ptr의 개수가 둘 이상이면 절대로 안됨.
*auto_ptr 객체를 복사하면 원본 객체는 null로 만들기 때문에 주의할 것
*shared_ptr의 경우 동시에 그 객체를 가리킬 수는 있음(다른 기능은 동일: 함수 종료시 객체가 자동적으로 delete)
'More Programmings > Effective C++' 카테고리의 다른 글
항목 12: 객체의 모든 부분을 빠짐없이 복사하자 (0) | 2017.02.26 |
---|---|
항목 11: operator=에서는 자기대입에 대한 처리가 빠지지 않도록 하자 (0) | 2017.02.26 |
항목 10: 대입 연산자는 *this의 참조자를 반환하게 하자 (0) | 2017.02.26 |
항목 9: 객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자 (0) | 2017.02.26 |
항목 8: 예외가 소멸자를 떠나지 못하도록 붙들어 놓자 (0) | 2017.02.19 |