|
특정 Thread 내에서요..
map 내에 요소는 CString이고요
주기적으로 해당 map 에 있는 요소들을 삭제 하고
새로 추가 합니다.
그런데... 메모리 사용량이 계속 증가 합니다.
map 요소들을 삭제하는 루틴이 잘못됐는지.
Thread 내에서 map 이 safe 하지 않은지..
잘 모르겠습니다.
다만, 구글 같은데를 검색해보니.
map 요소들을 삭제할떄 CString의 소멸자가 호출 안돼서 그렇다고 하는것
같은데요.
해결책이 없을까요?
map 선언은 아래와 같고요
typedef map<int, CString, less<int> > CRcvTagTable;
map 내 특정key 값을 가지는 CString 요소를 추가하는 부분은
아래 루틴을 사용하고요.
void XTest::SetHeaderField(CRcvTagTable *head_table, int key, CString value)
{
head_table->insert(make_pair(key, value));
}
아래는 map 내 요소들을 삭제하는 루틴입니다.
void XTest::RemoveRcvTagDatas(CRcvTagTable *head_table)
{
CRcvTagTable::iterator begin = head_table->begin(),
end = head_table->end();
int key;
for( ; begin != end; )
{
key = begin->first;
if(begin->second)
{
begin->second.Empty();
}
begin++;
// head_table->erase(key); // 이렇게 개별적으로도 삭제해 봤고요
}
head_table->erase(head_table->begin(), head_table->end()); // 한꺼번에 삭제도 해보았습니다.
head_table->clear(); // clear도 해봤고요..
}
고수님들의 고견 부탁합니다.
|