stl vector new로 선언한 메모리 삭제 방법
STL 2007. 9. 6. 14:38 |vector 라는 컨테이너 다른 경우도 포함이 되지만. 컨테이너는 지능적이기는 하지만 메모리에 대해서는 신경을 쓰지 않습니다. 즉 new로 선언한 객체의 delete가 행해 지지 않는 다는 거죠.
보통 아래의 일반적인 경우로 메모리를 처리 할수 있습니다.
//헤더 선언
#include <vector>
#include <functional> -> 아래쪽 디파인 잡을때 사용되는거
#include <algorithm> -> 아래쪽 디파인 잡을때 사용되는거
#include <iostream>
using namespace std;
//선언
vector< int* > m_List;
//추가
m_List.clear();
for(int i = 0; i < 2; i++) {
int* p = new int;
*p = 10;
m_List.push_back(p);
}
//삭제
for(vector< int* >::iterator i = m_List.begin(); i != m_List.end(); ++i)
{
delete (*i);
}
// 조금 편한 삭제 방법
//디파인
class DeleteObj
{
public:
template<typename T>
void operator()(const T* ptr) const
{
delete ptr;
}
};
//삭제
for_each(m_List.begin(), m_List.end(), DeleteObj());
위의 클래스로 템플릿을 만들어 놨기 때문에.
대부분의 객체에 삭제 함수로 적용할 수 있다.
for_each를 통해서 조금더 코드량을 줄이고 가독성을 높일수 있을거 같다.