void doSomething()
{
vector<Widget*> vwp;
for( int i = 0; i < SOME_NUMBER; ++i )
{
vwp.push_back(new Widget);
}
…
}
위와 같은 코드를 보면 vwp 라는 컨테이너가 doSomething을 빠져나가면서 소멸될때 메모리가 샐것이라는것을 알수 있다. 이 문제는 스마트포인터를 사용하지 않는 이상 사용자 처리해 주어야 하는데 일반적으로 이렇게 짤수 있다.
struct DeleteObject{
template<typename T>
void operator()(const T* ptr) const
{
delete ptr;
}
};…
void doSomething()
{
vector<Widget*> vwp;
for( int i = 0; i < SOME_NUMBER; ++i )
{
vwp.push_back(new Widget);
}
…for_each(vwp.begin(), vwp.end() DeleteObject() );
}
하지만 위의 코드 역시 vwp 에 데이타를 삽입한 이후 예외상황이 발생하면 메모리는 새게 된다. 이 문제를 해결하는 방법은 스마트포인터를 사용하는 수밖엔 없다.
스마트포인터는 Boost 라이브러리의 shared_ptr 을 사용하면 좋다.
스마트포인터는 Boost 라이브러리의 shared_ptr 을 사용하면 좋다.
주의사항 : auto_ptr을 컨테이너에 넣으면 안된다