Vector를 사용할때 매번 하는 부분을 template로 대체해서 사용하장..!!
STL 2007. 11. 14. 14:42 |vector를 사용해서 객체를 저장할때 포인터 형으로 하게 되면
메모리 누수를 막기 위해서 객체를 항상 Delete 해줘야 한다.
솔직히 매번 Add, Delete, DeleteAll 등을 해줘야 하는 불편함이 전(??) 있었다. ^^
그래서 템플릿으로 하나 만들었다.
for-each 이건.. 왜 안되는지 ^^.. 암튼.. 현재걸로 조금 우선 사용해보자.
// 사용법 //
CGsiV<CTest> VectorArray;
VectorArray.Add(new CTest());
int size = VectorArray.GetVector()->size();
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// CGsiV
template <class T>
class CGsiV
{
public:
CGsiV() {
m_v.clear();
}
virtual ~CGsiV() {
DeleteAll();
}
// Add
void Add(T* t) {
m_v.push_back(t);
}
// Delete
bool Delete(T* t) {
T* p;
vector<T*>::iterator iter;
for(iter = m_v.begin(); iter != m_v.end(); ++iter) {
p = (*iter);
if(p != NULL && p == t) {
delete p;
p = NULL;
m_v.erase(iter);
return true;
}
}
return false;
}
// DeleteAll
void DeleteAll() {
T* p;
vector<T*>::iterator iter;
for(iter = m_v.begin(); iter != m_v.end(); iter++) {
p = (*iter);
if(p != NULL) {
delete p;
p = NULL;
}
}
m_v.clear();
}
//GetVector
vector<T*>* GetVector() { return &m_v; }
protected:
vector<T*> m_v;
};